如何防止组合内的WPF文本框对鼠标右键单击作出反应?

时间:2010-09-12 10:20:36

标签: wpf wpf-controls

我创建了一个custonmized框类(继承自ComboBox)。我不希望文本框对鼠标右键单击做出反应。我可以通过在ApplyTemplate中将其设置为null来摆脱上下文菜单,但是鼠标右键单击会移动光标。我尝试在ApplyTemplate中连接PreviewMouseRightButtonDown并将Handled设置为True,但事件仍然通过,这很奇怪,因为它似乎适用于左键单击。

1 个答案:

答案 0 :(得分:2)

释放鼠标按钮时光标实际移动,因此您希望将MouseRightButtonUp事件标记为已处理。您可以覆盖OnMouseRightButtonUp

protected override void OnMouseRightButtonUp(MouseButtonEventArgs e)
{
    base.OnMouseRightButtonUp(e);
    e.Handled = true;
}

或者您可以将类处理程序附加到MouseRightButtonUp事件以将其标记为已处理:

static MyComboBox()
{
    EventManager.RegisterClassHandler(
        typeof(MyComboBox), 
        MouseRightButtonUpEvent, 
        new MouseButtonEventHandler(MyComboBox_MouseRightButtonUp));
}

private static void MyComboBox_MouseRightButtonUp(
    object sender, MouseButtonEventArgs e)
{
    e.Handled = true;
}

这也会阻止创建上下文菜单,而不必显式设置为null。