当父控件包含嵌套按钮时如何阻止父控件接收触摸事件

How to stop parent control taking touch event when it contains a nested button

所以我有了我的控件,我想在触摸时展开它并显示我的按钮,它嵌套在控件的数据模板中。然后我希望按钮可以按下,但也希望控件在按钮以外的任何地方被触摸时折叠

初始化控件

MyControl mc = new MyControl();
mc.TouchDown += mc_TouchDown;
mc.TouchUp += mc_TouchUp;

事件处理程序

    void mc_TouchDown(object sender, TouchEventArgs e)
    {
        var mc = (MyControl)sender;
        mc.CaptureTouch(e.TouchDevice);
    }

    void mc_TouchUp(object sender, TouchEventArgs e)
    {
        var mc = (MyControl)sender;
        if (mc != null && e.TouchDevice.Captured == mc)
        {
            //Expand and show button / Collapse and hide button
            mc.ReleaseTouchCapture(e.TouchDevice);
        }
    }

现在按钮位于 MyControl 的数据模板中并连接到一个命令,当我触摸按钮 运行 时,命令 MyControl 触摸事件被触发然后点击按钮会被忽略。

如何才能使 MyControl 上的触摸事件起作用,但是当显示并触摸按钮时,按钮触摸事件优先于 MyControl 事件?

尝试为 TouchEventArgs 设置 e.Handled = true 以防止事件冒泡。

所以我对我的按钮使用了 Command,但我将其更改为使用 TouchDown 事件,并且

    private void addToDiary_TouchDown(object sender, TouchEventArgs e)
    {
        //do my thing
        e.Handled = true;
    }

这意味着按钮已执行且事件没有冒泡到 MyControl