【问题标题】:Close DropDown of RibbonComboBox on Button Click单击按钮时关闭 RibbonComboBox 的下拉菜单
【发布时间】:2014-01-15 10:33:45
【问题描述】:

我有一个使用 RibbonControlsLibrary 的简单 WPF 功能区窗口。

在这个窗口中,我有一个包含按钮元素的 RibbonComboBox。我的意图是在单击按钮后关闭 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 事件处理程序没有被调用。有人可以给我一些关于如何以干净的方式在第一次点击时关闭功能区的提示吗?

【问题讨论】:

    标签: c# wpf ribbon


    【解决方案1】:

    你可以给你的RibbonComboBox一个名字,比如说x:Name="comboBox",然后在鼠标按下事件处理程序后面的代码中,你可以简单地这样做:comboBox.IsDropDownOpen = false;

    【讨论】:

    • 正如我所写,我不想显式访问底层组合框,所以这不是我问题的答案。
    • 我的理解是按钮会在不同的地方重复使用。但是,在 MainWindow 后面的代码中处理 click 事件并访问 ComboBox 与按钮的可重用性无关。事件处理部分仅适用于该特定按钮实例。除非您在这里谈论重用特定按钮实例。
    • 对不起,我原来的例子太简单了。我更新了我的问题。是的,我想重用一个自定义按钮类。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多