【问题标题】:How to remove ContextMenu from parts of WPF Ribbon Control如何从 WPF 功能区控件的部分中删除 ContextMenu
【发布时间】:2019-06-19 18:10:18
【问题描述】:

我们需要替换 RibbonButton 项目的上下文菜单,并在其他任何地方禁止上下文菜单。 我们已经成功地将上下文菜单替换为顶层的任何内容:

 <ribbon:Ribbon x:Name="ribbon" ItemsSource="{Binding RibbonItems}">
        <ribbon:Ribbon.ContextMenu>
            <ribbon:RibbonContextMenu>
            </ribbon:RibbonContextMenu>
        </ribbon:Ribbon.ContextMenu>
    </ribbon:Ribbon>

(请注意,功能区是以编程方式填充的,而不是在 xaml 中显式填充。)

我们已经替换了 RibbonButton 上下文菜单:

<DataTemplate DataType="{x:Type local:ControlData}">
<ribbon:RibbonButton>
    <RibbonButton.Template>
        <!-- snip -->
    </RibbonButton.Template>
    <RibbonButton.ContextMenu>
        <RibbonContextMenu>
            <MenuItem Header="Help" Command="{Binding HelpCommand}" />
        </RibbonContextMenu>
    </RibbonButton.ContextMenu>
</ribbon:RibbonButton>

我们还没有弄清楚如何在菜单项周围的区域中抑制上下文菜单(下图中的粉红色):

编辑:这是在菜单项周围的空白处单击时出现的上下文菜单:

任何想法都将不胜感激......

【问题讨论】:

    标签: wpf xaml ribbon-control


    【解决方案1】:

    要隐藏默认的快速访问工具栏,必须提供一个假的,然后在打开消息时对其进行处理

    <ribbon:Ribbon Title="Ribbon Me">
       <ribbon:Ribbon.QuickAccessToolBar>
          <ribbon:RibbonQuickAccessToolBar ContextMenuOpening="QuickContextMenuOpening">
             <DockPanel>
                <ribbon:RibbonButton Label="faux"  />
             </DockPanel>
          </ribbon:RibbonQuickAccessToolBar>
       </ribbon:Ribbon.QuickAccessToolBar>
    

    代码背后

    private void QuickContextMenuOpening(object sender, ContextMenuEventArgs e)
    {
        e.Handled = true;
    }
    

    【讨论】:

    • 谢谢,但这不是我想要禁止的 QAT 上下文菜单。不知道是RibbonTab,还是RibbonControlGroup,还是什么。
    • 你能截屏出现的上下文菜单吗?
    【解决方案2】:

    RibbonGroupContextMenu 属性设置为null。根据您的Ribbon 的定义方式,您可以使用添加到RibbonResource 字典中的隐式Style 对所有组执行此操作:

    <Ribbon x:Name="ribbon" ..>
        <Ribbon.Resources>
            <Style TargetType="RibbonGroup">
                <Setter Property="ContextMenu" Value="{x:Null}" />
            </Style>
        </Ribbon.Resources>
    </Ribbon>
    

    【讨论】:

    • 奇怪——当我在 中添加该样式时,功能区的任何内容都没有显示....也许这与使用功能区上的 ItemsSource 属性有关?
    【解决方案3】:

    看起来很简单:

        <!-- RibbonGroup -->
        <Style TargetType="{x:Type ribbon:RibbonGroup}" BasedOn="{StaticResource RibbonControlStyle}">
            <!-- snip -->
            <Setter Property="ContextMenu" Value="{x:Null}" />
         </Style>
    

    感谢 mm8 在 Resources 的属性设置器中发布 ContextMenu = null....

    【讨论】:

    • 既然已经有答案了,为什么还要发布自己的答案...?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多