У меня есть простое окно ленты WPF, использующее RibbonControlsLibrary.
В этом окне у меня есть RibbonComboBox, который содержит элемент кнопки. Я намерен закрыть раскрывающийся список RibbonComboBox после нажатия кнопки. Я не хочу манипулировать свойством IsOpen RibbonComboBox, так как Button следует повторно использовать для разных целей. Моя идея состояла в том, чтобы обработать событие MouseDown кнопки, а затем установить для e.Handled значение false
XAML выглядит так
<ribbon:RibbonWindow x:Class="WpfRibbonApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ribbon="clr-namespace:Microsoft.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary"
xmlns:my="clr-namespace:WpfRibbonApplication3"
Title="MainWindow"
x:Name="RibbonWindow"
Width="640" Height="480">
<ribbon:Ribbon>
<ribbon:RibbonTab Header="Home">
<ribbon:RibbonGroup Header="Group1">
<ribbon:RibbonComboBox>
<ribbon:RibbonGallery>
<ribbon:RibbonGalleryCategory>
<ribbon:RibbonGalleryItem>
<my:CustomButton Content="Test" />
</ribbon:RibbonGalleryItem>
</ribbon:RibbonGalleryCategory>
</ribbon:RibbonGallery>
</ribbon:RibbonComboBox>
</ribbon:RibbonGroup>
</ribbon:RibbonTab>
</ribbon:Ribbon>
</ribbon:RibbonWindow>
Код выглядит следующим образом:
public CustomButton()
{
// Insert code required on object creation below this point.
AddHandler(MouseDownEvent,(RoutedEventHandler)Button_MouseDown,true);
}
private void Button_MouseDown(object sender, RoutedEventArgs e)
{
Console.WriteLine(string.Format("MouseDownEvent, e.Handled = {0}", e.Handled));
e.Handled = false;
}
Событие запускается, но раскрывающийся список ленты закрывается только при втором нажатии кнопки. Интересно, что при втором нажатии кнопки обработчик события MouseDown не вызывается. Может ли кто-нибудь дать мне несколько советов о том, как добиться закрытия ленты при первом щелчке в чистом виде?