Как удалить ContextMenu из частей WPF Ribbon Control - PullRequest
1 голос
/ 19 июня 2019

Нам нужно заменить контекстное меню для элементов 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>

Мы не выяснили, как подавить контекстное меню в области вокруг пунктов меню (розовое на рисунке ниже): enter image description here

Редактировать: вот контекстное меню, которое появляется при нажатии в пустом пространстве вокруг пунктов меню: enter image description here

Любые идеи будут оценены ....

Ответы [ 3 ]

0 голосов
/ 20 июня 2019

Установите для свойства ContextMenu RibbonGroup значение null. В зависимости от того, как определен ваш Ribbon, вы можете сделать это для всех групп, используя неявный Style, который вы добавляете в Resource словарь Ribbon:

<Ribbon x:Name="ribbon" ..>
    <Ribbon.Resources>
        <Style TargetType="RibbonGroup">
            <Setter Property="ContextMenu" Value="{x:Null}" />
        </Style>
    </Ribbon.Resources>
</Ribbon>
0 голосов
/ 20 июня 2019

Это выглядит так просто:

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

Спасибо mm8 за публикацию ContextMenu = null в установщике свойств в Ресурсах ....

0 голосов
/ 19 июня 2019

Чтобы скрыть панель быстрого доступа по умолчанию, необходимо предоставить искусственную и затем обработать сообщение, когда оно откроется как таковое

<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;
}
...