如何自定义默认上下文菜单

时间:2013-02-07 11:28:43

标签: wpf wpf-controls contextmenu

在我的WPF应用程序中,我希望将所有文本框剪切,复制和粘贴限制。 一种方法是设置ContextMenu ="{x:Null}"

但通过这样做,我将放弃拼写检查建议,我不想放松。另外在我的应用程序中,我有1000个文本框,所以我想以更优化的方式做到这一点。

任何建议都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

如果你需要的是与拼写检查相关的菜单项,你可以参考这篇MSDN文章:
How to: Use Spell Checking with a Context Menu

如果您要将自定义ContextMenu应用于多个(但不是全部)文本框:

  <Window.Resources>
    <ContextMenu x:Key="MyCustomContextMenu">
      <MenuItem Header="Ignore All" Command="EditingCommands.IgnoreSpellingError" />
    </ContextMenu>
  </Window.Resources>
  <Grid>
    <TextBox Height="23" Name="textBox1" Width="120" SpellCheck.IsEnabled="True"
      ContextMenu="{StaticResource MyCustomContextMenu}" />
  </Grid>

如果您要将自定义ContextMenu应用于所有文本框:

  <Window.Resources>
    <Style TargetType="{x:Type TextBox}">
      <Setter Property="ContextMenu">
        <Setter.Value>
          <ContextMenu>
            <MenuItem
              Header="Ignore All"
              Command="EditingCommands.IgnoreSpellingError" />
          </ContextMenu>
        </Setter.Value>
      </Setter>
    </Style>
  </Window.Resources>
  <Grid>
    <TextBox Height="23" Name="textBox1" Width="120" SpellCheck.IsEnabled="True"  />
  </Grid>


注意:

  1. 您可以将上下文菜单资源移动到应用程序级别而不是窗口级别。
  2. MSDN文章提到通过C#代码获取菜单项,而不是通过XAML。我可以轻松地将“忽略全部”命令移植到XAML(上面的代码片段),但是对于拼写建议,你将不得不做一些R&amp; D.