如何在WPF RichTextBox中禁用鼠标右键的默认上下文菜单?

如何在WPF RichTextBox中禁用鼠标右键的默认上下文菜单?,wpf,richtextbox,Wpf,Richtextbox,我有以下事件处理程序: private void rtb_MouseDown(object sender, MouseEventArgs e) { if (e.RightButton == MouseButtonState.Pressed) { // Get the nearest TextPointer to the mouse position. TextPointer location = rtb.GetPositionFromPoint(

我有以下事件处理程序:

private void rtb_MouseDown(object sender, MouseEventArgs e)
{
    if (e.RightButton == MouseButtonState.Pressed)
    {
        // Get the nearest TextPointer to the mouse position. 
        TextPointer location = rtb.GetPositionFromPoint(Mouse.GetPosition(rtb), true);

        // Get the nearest word using this TextPointer. 
        TextRange word = GetWordRange(location);

        // Display the word. 
        tb.Text = word.Text;

        e.Handled = true;
    }
}
这会连接到RichTextBox的PreviewMouseDown事件。触发此事件并调用上述方法,光标下的单词显示在单独的文本框(称为tb)中

问题在于,之后还会显示鼠标右键单击事件的默认上下文菜单(包含剪切/复制/粘贴选项)。将Handled属性设置为true似乎没有帮助。如何禁用此关联菜单

编辑:Xaml代码:

<Window x:Class="rtbTest1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <RichTextBox Height="175" HorizontalAlignment="Left" Margin="10,127,0,0" Name="rtb" VerticalAlignment="Top" Width="483" PreviewMouseDown="rtb_MouseDown" />
        <TextBox Height="59" HorizontalAlignment="Left" Margin="286,24,0,0" Name="tb" VerticalAlignment="Top" Width="186" />
        <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="63,56,0,0" Name="btn1" VerticalAlignment="Top" Width="75" Click="btn1_Click" />
    </Grid>
</Window>

null
it:

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

null
it:

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


请同时添加xaml代码请同时添加xaml代码是的,这很有效,谢谢。我不明白的是:这不是禁用了RichTextBox的所有上下文菜单吗?还有,这是应该怎么做的,还是一个暴力解决方案?@Sabuncu:有不止一个上下文菜单?如果您想要另一个上下文菜单,请不要将其设置为null,而是将其设置为所需的上下文菜单,这没有任何远程暴力。显示具有剪切/复制/粘贴的上下文菜单是因为触发了某些事件处理程序上游。为什么即使我在我的事件处理程序代码中将Handled设置为true,也会出现这种情况?@Sabuncu:您正在处理一个不同的事件,您停止事件向下(
PreviewMouseDown
)并不会停止事件的发生(
MouseDown
),而且我假设
ContextMenu
使用
MouseUp
)。或者可能是右按钮的变体。由于一些奇怪的原因,这在数据模板中不起作用,这非常令人沮丧。是的,这很有效,谢谢。我不明白的是:这不是禁用了RichTextBox的所有上下文菜单吗?还有,这是应该怎么做的,还是一个暴力解决方案?@Sabuncu:有不止一个上下文菜单?如果您想要另一个上下文菜单,请不要将其设置为null,而是将其设置为所需的上下文菜单,这没有任何远程暴力。显示具有剪切/复制/粘贴的上下文菜单是因为触发了某些事件处理程序上游。为什么即使我在我的事件处理程序代码中将Handled设置为true,也会出现这种情况?@Sabuncu:您正在处理一个不同的事件,您停止事件向下(
PreviewMouseDown
)并不会停止事件的发生(
MouseDown
),而且我假设
ContextMenu
使用
MouseUp
)。或者可能是右按钮的变体。由于一些奇怪的原因,这在数据模板中不起作用,这非常令人沮丧。