Закрыть раскрывающийся список RibbonComboBox при нажатии кнопки

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


person David    schedule 15.01.2014    source источник


Ответы (1)


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

person Leon Zhou    schedule 15.01.2014
comment
Как я уже писал, я не хочу явно обращаться к основному полю со списком, поэтому это не ответ на мой вопрос. - person David; 15.01.2014
comment
Насколько я понимаю, кнопка будет повторно использоваться в разных местах. Однако обработка события click в коде MainWindow и доступ к ComboBox не имеют ничего общего с возможностью повторного использования кнопки. Часть обработки событий применяется только к этому конкретному экземпляру кнопки. Если вы не говорите о повторном использовании конкретного экземпляра кнопки здесь. - person Leon Zhou; 16.01.2014
comment
Извините, мой исходный пример был слишком простым. Я обновил свой вопрос. Да, я хочу повторно использовать пользовательский класс кнопок. - person David; 17.01.2014