WPF- Как скрыть выпадающее меню после клика

У меня есть SplitButton в моем окне WPF, которое позаимствовано из расширенного инструментария Xceed WPF. Его выпадающий контент состоит из некоторых RadioButtons. Что-то вроде:

<Window x:Class="WpfTest.Test3"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:tk="clr-namespace:Xceed.Wpf.Toolkit;assembly=Xceed.Wpf.Toolkit"
        Title="Test3" Height="300" Width="300">
    <Grid Height="25" Width="150">
        <tk:SplitButton Content="Default Command">
            <tk:SplitButton.DropDownContent>
                <StackPanel>
                    <RadioButton Content="Default Command" GroupName="variations" Margin="5" IsChecked="True"/>
                    <RadioButton Content="Alternate Command 1" GroupName="variations" Margin="5"/>
                    <RadioButton Content="Alternate Command 2" GroupName="variations" Margin="5"/>
                </StackPanel>
            </tk:SplitButton.DropDownContent>
        </tk:SplitButton>
    </Grid>
</Window>

который генерирует что-то вроде этого:

тестовое задание

Проблема в том, когда я нажимаю на каждый из RadioButtons выпадающее меню не исчезает. Я немного погуглил и понял, что должен справиться с Click событие для каждого RadioButton, Но я не знаю, как скрыть выпадающее меню в этом обработчике событий. Как примечание, кажется, MenuItem обладает свойством StaysOpenOnClick, но нет такой вещи для других элементов управления.

Хотя этого было бы достаточно программно, но есть ли для этого способ MVVM?

1 ответ

Решение

Добавьте событие Checked на вашу кнопку-переключатель и используйте SplitoButton.IsOpen=false;, Следуйте этому коду.

Xaml

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:tk="clr-namespace:Xceed.Wpf.Toolkit;assembly=Xceed.Wpf.Toolkit"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <tk:SplitButton Name="SplitButton" Content="Default Command">

            <tk:SplitButton.DropDownContent>

                <StackPanel>
                    <RadioButton Checked="rb_Checked" Content="Default Command" GroupName="variations" Margin="5" IsChecked="True"/>
                    <RadioButton Checked="rb_Checked" Content="Alternate Command 1" GroupName="variations" Margin="5"/>
                    <RadioButton Checked="rb_Checked" Content="Alternate Command 2" GroupName="variations" Margin="5"/>
                </StackPanel>

            </tk:SplitButton.DropDownContent>
        </tk:SplitButton>
    </Grid>
</Window>

.cs

 private void rb_Checked(object sender, RoutedEventArgs e)
        {
            SplitButton.IsOpen = false;
        }
Другие вопросы по тегам