当父控件包含嵌套按钮时如何阻止父控件接收触摸事件
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
所以我有了我的控件,我想在触摸时展开它并显示我的按钮,它嵌套在控件的数据模板中。然后我希望按钮可以按下,但也希望控件在按钮以外的任何地方被触摸时折叠
初始化控件
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