代码之家  ›  专栏  ›  技术社区  ›  Shane

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

  •  1
  • Shane  · 技术社区  · 14 年前

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

    1 回复  |  直到 14 年前
        1
  •  2
  •   Quartermeister    14 年前

    释放鼠标按钮时,光标实际上会移动,因此您需要标记 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;
    }