按钮上的RibbonComboBox关闭DropDown单击

时间:2014-01-15 10:33:46

标签: c# wpf ribbon

我正在使用RibbonControlsLibrary创建一个简单的WPF功能区窗口。

在这个窗口中,我有一个包含Button元素的RibbonComboBox。我的意图是在单击Button后关闭RibbonComboBox的下拉列表。我不想操纵RibbonComboBox的IsOpen属性,因为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事件处理程序。有人能给我一些关于如何以干净的方式在第一次点击时关闭色带的提示吗?

1 个答案:

答案 0 :(得分:0)

您可以为RibbonComboBox提供一个名称,让我们说x:Name="comboBox",然后在鼠标按下事件处理程序后面的代码中,您可以执行以下操作:comboBox.IsDropDownOpen = false;