【发布时间】:2015-02-27 15:23:29
【问题描述】:
所以我有我的控件,我想在触摸时扩展它并显示我的按钮,该按钮嵌套在控件的数据模板中。然后我希望按钮是可按下的,但如果触摸按钮以外的任何地方,我也希望控件折叠
初始化控制
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 事件?
【问题讨论】:
-
您是否尝试过处理
PreviewTouchDown和PreviewTouchUp而不是TouchDown和TouchUp? -
@StevenRands 刚刚尝试过,但行为仍然相同。根据我的理解,使用 Preview 只是意味着更快地触发触摸事件?
-
这并不是 隧道 和 冒泡 事件之间的真正区别。无论如何,我怀疑您的问题与触摸捕获有关。鉴于您为自定义控件描述的行为,
Expander控件是否更合适? -
@StevenRands 为控件是来自第三方库的地图上的 PushPin 问题提供更多信息,我已扩展该控件以响应动态设置数据模板的触摸事件,使其外观展开/折叠控件。但这意味着数据模板中的任何控件都不会响应触摸事件
-
也许尝试仅在
TouchDown事件上展开/折叠?完全删除触摸捕获的东西和TouchUp事件处理程序,看看你是否还有同样的问题?
标签: c# wpf events event-handling touch