我正在实现MVVM项目中描述的解决方案:http://nui.joshland.org/2010/04/why-wont-wpf-controls-work-with-touch.html
但问题是,如果我实现的TouchDown和TouchUp事件处理程序在UserControl在我的XAML然后我遇到了一个问题,其他GroupView不能得到的窗口消息为轻弹-或轻弹不能被处理,所以他们的相关窗口消息永远不会发送。
视图的自顶向下结构为:ButtonsView——有Touch事件处理程序GroupView——有鼠标事件处理程序和Flicks事件处理程序
我在代码后面使用这个来挂钩flick并处理它们:
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
HwndSource source = PresentationSource.FromVisual(this) as HwndSource;
source.AddHook(WndProc);
}
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
if (msg == Flicks.WM_TABLET_FLICK)
{
Flick flick = Flicks.ProcessMessage(lParam, wParam);
if (flick != null)
{
if (flick.Data.Direction == FLICKDIRECTION.FLICKDIRECTION_LEFT)
Scroller("left"); //scrolls left
else if (flick.Data.Direction == FLICKDIRECTION.FLICKDIRECTION_RIGHT)
Scroller("right"); //scrolls right
else if (flick.Data.Direction == FLICKDIRECTION.FLICKDIRECTION_UP)
Scroller("up"); //move up
else if (flick.Data.Direction == FLICKDIRECTION.FLICKDIRECTION_DOWN)
Scroller("down"); //move down
handled = true;
}
}
return IntPtr.Zero;
}
想法/建议吗?我对WPF很陌生。由于
我通过在ButtonsView中捕获鼠标事件和轻弹事件来解决这个问题,这样它们就不会隧道到GroupView