在 WPF 中,事件遍历元素树。以“预览”开头的事件是从上到下的事件,这意味着从父级到它包含的元素。在您的情况下,TouchDown 事件将从它起源的控件传播,然后它会冒泡向父母。PreviewTouchDown 将朝相反的方向行进:从父控件到控件。您在 Application.Current.MainWindow 中处理 PreviewTouchDown 事件的想法很好,如果这是您想要的,应该处理所有 PreviewTouchDown 事件。但是在您的情况下,如果您想检查事件是否源自您的自定义控件,您应该在 MainWindow 中捕获所有 TouchDown 事件并检查它们的 Source 属性,如下所示:
private void CommonClickHandler(object sender, RoutedEventArgs e)
{
FrameworkElement feSource = e.Source as FrameworkElement;
if(feSource.Name == "MyCustomControlName")
{
//cancel whatever you want to cancel
e.Handled=true;
}
}
不要捕捉 PreviewTouchDown 事件,因为该事件将首先在 MainWindow 中弹出,稍后将一直到达您的控件。
此msdn 链接应该为您提供更多信息:http: //msdn.microsoft.com/en-us/library/ms742806.aspx