У меня есть простое окно ленты WPF с помощью RibbonControlsLibrary.Close DropDown of RibbonComboBox на кнопке Нажмите
В этом окне у меня есть RibbonComboBox, который содержит элемент Button. Я намерен закрыть выпадающее меню RibbonComboBox после нажатия кнопки. Я не хочу манипулировать свойством IsOpen RibbonComboBox, так как Button следует использовать повторно для разных целей. Моя идея состояла в том, чтобы обработать событие MouseDown кнопки, а затем установить e.Handled ложных
Части 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 не запускается. Может ли кто-нибудь дать мне несколько советов о том, как добиться закрытия ленты при первом щелчке в чистом виде?
Как я уже писал, я не хочу, чтобы в явном виде получить доступ к основным combobox, так что это не ответ на мой вопрос. – David
Я понимаю, что кнопка будет использоваться повторно в разных местах. Однако обработка события click в коде позади MainWindow и доступ к ComboBox не имеет ничего общего с возможностью повторного использования кнопки. Часть обработки событий применяется только к этому конкретному экземпляру кнопки. Если вы не говорите о повторном использовании конкретного экземпляра кнопки здесь. –
Извините, мой оригинальный пример был слишком простым. Я обновил свой вопрос. Да, я хочу повторно использовать собственный класс кнопок. – David