WPF:如何设置或禁用TextBox的默认ContextMenu

Arc*_*rus 29 wpf xaml .net-3.5

当用户右键单击我们的WPF应用程序并且他们使用Windows经典主题时,TextBox的默认ContextMenu(包含复制,剪切和粘贴)具有黑色背景.

我知道这很有效:

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

  <TextBox ContextMenu="{x:Null}"/>

</Page>
Run Code Online (Sandbox Code Playgroud)

但这不起作用:

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

<Page.Resources>

 <Style x:Key="{x:Type TextBox}" TargetType="{x:Type TextBox}">
   <Setter Property="ContextMenu" Value="{x:Null}"/>
</Style>
</Page.Resources>

  <TextBox/>
</Page> 
Run Code Online (Sandbox Code Playgroud)

有谁知道如何为WPF中的所有TextBox设置样式或禁用默认的ContextMenu?

Bra*_*ach 32

要为所有TextBox设置ContextMenu的样式,我会执行以下操作:

首先,在资源部分中,添加一个您计划在文本框中用作标准ContextMenu的ContextMenu.
例如

<ContextMenu x:Key="TextBoxContextMenu" Background="White">
  <MenuItem Command="ApplicationCommands.Copy" />
  <MenuItem Command="ApplicationCommands.Cut" />
  <MenuItem Command="ApplicationCommands.Paste" />
</ContextMenu>
Run Code Online (Sandbox Code Playgroud)

其次,为TextBoxes创建一个样式,它使用上下文菜单资源:

<Style TargetType="{x:Type TextBox}">
  <Setter Property="ContextMenu" Value="{StaticResource TextBoxContextMenu}" />
</Style>
Run Code Online (Sandbox Code Playgroud)

最后,正常使用您的文本框:

<TextBox />
Run Code Online (Sandbox Code Playgroud)

如果您只想将此上下文菜单应用于某些文本框,请不要创建上面的样式,并将以下内容添加到TextBox标记中:

<TextBox ContextMenu="{StaticResource TextBoxContextMenu}" />
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!


小智 18

离奇.ContextMenu="{x:Null}"没有办法.

但是这样做:

<TextBox.ContextMenu>
    <ContextMenu Visibility="Collapsed">
    </ContextMenu>
</TextBox.ContextMenu>
Run Code Online (Sandbox Code Playgroud)


Arc*_*rus 8

由于后期错误报告,我们发现我们无法在部分受信任的应用程序中直接使用ApplicationComands Cut Paste和Copy.因此,在控件的任何Commmand中使用这些命令在执行时绝对不会执行任何操作.

所以从本质上来说Brads的回答几乎就在那里,它确实看起来是正确的方式,即没有黑色背景,但没有解决问题.

我们决定根据Brads的答案"删除"菜单,如下所示:

<ContextMenu x:Key="TextBoxContextMenu" Width="0" Height="0" />
Run Code Online (Sandbox Code Playgroud)

并使用这样的空上下文菜单,如下所示:

<Style TargetType="{x:Type TextBox}">
  <Setter Property="ContextMenu" Value="{StaticResource TextBoxContextMenu}" />
</Style>
Run Code Online (Sandbox Code Playgroud)