2014-01-15 3 views
0

У меня есть простое окно ленты 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 не запускается. Может ли кто-нибудь дать мне несколько советов о том, как добиться закрытия ленты при первом щелчке в чистом виде?

ответ

0

Вы можете дать RibbonComboBox имени, скажем x:Name="comboBox", то в коде позади в мыши вниз обработчик событий, вы можете просто сделать: comboBox.IsDropDownOpen = false;

+0

Как я уже писал, я не хочу, чтобы в явном виде получить доступ к основным combobox, так что это не ответ на мой вопрос. – David

+0

Я понимаю, что кнопка будет использоваться повторно в разных местах. Однако обработка события click в коде позади MainWindow и доступ к ComboBox не имеет ничего общего с возможностью повторного использования кнопки. Часть обработки событий применяется только к этому конкретному экземпляру кнопки. Если вы не говорите о повторном использовании конкретного экземпляра кнопки здесь. –

+0

Извините, мой оригинальный пример был слишком простым. Я обновил свой вопрос. Да, я хочу повторно использовать собственный класс кнопок. – David

Смежные вопросы