WPF- Как скрыть выпадающее меню после клика
У меня есть SplitButton
в моем окне WPF, которое позаимствовано из расширенного инструментария Xceed WPF. Его выпадающий контент состоит из некоторых RadioButton
s. Что-то вроде:
<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>
который генерирует что-то вроде этого:
Проблема в том, когда я нажимаю на каждый из RadioButton
s выпадающее меню не исчезает. Я немного погуглил и понял, что должен справиться с 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;
}