删除WPF中RibbonMenuItem的焦点



我的WPF应用程序中有一个简单的Ribbon,组中有RibbonGroup和RibbonMenuButton。我想在单击此按钮后删除焦点。现在我必须双击或点击其他东西才能失去焦点。

<Custom:Ribbon Name="RibbonMenu" Focusable="True" Background="WhiteSmoke" HorizontalAlignment="Stretch" VerticalAlignment="Top" Loaded="RibbonLoaded" Grid.Row="0" Grid.ColumnSpan="2">
        <Custom:RibbonTab Name="home" Header="Home" KeyTip="H" Focusable="True" >
            <Custom:RibbonGroup Focusable="True" x:Name="utilsGroup" Header="Utils">
                <Custom:RibbonMenuButton x:Name="btUtils1" PreviewMouseLeftButtonDown="btUtils1_MouseLeftButtonDown" Label="Utility no 1" LargeImageSource="Resources/utils.png"/>
            </Custom:RibbonGroup>
        </Custom:RibbonTab>
</Custom:Ribbon>

还有我的代码头:

private void btUtils1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e){
       home.Focus();
}

它根本不起作用。我寻找解决方案,但似乎任何来自网络的东西都可以帮助我。有什么建议吗?

如果没有一个好的最小、完整和可验证的示例,尤其是更准确地解释代码的实际用途;即清楚、准确地说明代码现在做什么,以及您希望它做什么—很难确切地知道你在努力实现什么。

也就是说,在您给出的示例中,您有一个RibbonMenuButton,当单击它时,它会打开一个下拉列表,该下拉列表一直保持打开状态,直到鼠标捕获丢失为止(即用户使用鼠标或键盘将注意力转移到其他地方)。

如果您正特别尝试在单击时使此下拉列表消失,则可以通过将IsDropDownOpen属性设置为false来完成此操作。请注意,在完成所有输入处理后,您必须这样做,因为是输入本身导致下拉列表打开。您可以为此使用Dispatcher.InvokeAsync()。例如:

private void btUtils1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    Dispatcher.InvokeAsync(() => btUtils1.IsDropDownOpen = false);
}


也就是说,你确定你真的想要这里的RibbonMenuButton吗?如果您不希望控件保持打开状态或受到单击的明显影响,那么您真正想要的可能是RibbonButton。该控件类型的作用类似于普通按钮,单击后不会有任何可见的后期效果。

最新更新