如何覆盖用户控件中的 onTouchUp,它不仅可用于触发此用户控件上的事件,而且可用于触发整个应用程序
How to override the onTouchUp in the user control which can be used to fire the event not only on this user control, but whole application
我是 C# 和 WPF 的新手。现在,我想覆盖我的用户控件中的 onTouchUp
事件。然后我可以在引用中添加用户控件以供重用。问题是每次我想在应用程序上测试这个事件时,事件只在用户控制区域触发,而不是整个屏幕。有人对此有解决方案吗?
基本上,您需要在覆盖交互区域的元素上附加 PreviewTouchUp 事件。它也可能是应用程序窗口。不建议在 window 之外处理鼠标或触摸事件。
这是一个示例,如何将任何行为直接附加到 xaml 中的任何元素:
<Window my:MyBehaviour.DoSomethingWhenTouched="true" x:Class="MyProject.MainWindow">
public static class MyBehaviour
{
public static readonly DependencyProperty DoSomethingWhenTouchedProperty = DependencyProperty.RegisterAttached("DoSomethingWhenTouched", typeof(bool), typeof(MyBehaviour),
new FrameworkPropertyMetadata( DoSomethingWhenTouched_PropertyChanged));
private static void DoSomethingWhenTouched_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var uiElement = (UIElement)d;
//unsibscribe firt to avoid multiple subscription
uiElement.PreviewTouchUp -=uiElement_PreviewTouchUp;
if ((bool)e.NewValue){
uiElement.PreviewTouchUp +=uiElement_PreviewTouchUp;
}
}
static void uiElement_PreviewTouchUp(object sender, System.Windows.Input.TouchEventArgs e)
{
//you logic goes here
}
//methods required by wpf conventions
public static bool GetDoSomethingWhenTouched(UIElement obj)
{
return (bool)obj.GetValue(DoSomethingWhenTouchedProperty);
}
public static void SetDoSomethingWhenTouched(UIElement obj, bool value)
{
obj.SetValue(DoSomethingWhenTouchedProperty, value);
}
}
我是 C# 和 WPF 的新手。现在,我想覆盖我的用户控件中的 onTouchUp
事件。然后我可以在引用中添加用户控件以供重用。问题是每次我想在应用程序上测试这个事件时,事件只在用户控制区域触发,而不是整个屏幕。有人对此有解决方案吗?
基本上,您需要在覆盖交互区域的元素上附加 PreviewTouchUp 事件。它也可能是应用程序窗口。不建议在 window 之外处理鼠标或触摸事件。
这是一个示例,如何将任何行为直接附加到 xaml 中的任何元素:
<Window my:MyBehaviour.DoSomethingWhenTouched="true" x:Class="MyProject.MainWindow">
public static class MyBehaviour
{
public static readonly DependencyProperty DoSomethingWhenTouchedProperty = DependencyProperty.RegisterAttached("DoSomethingWhenTouched", typeof(bool), typeof(MyBehaviour),
new FrameworkPropertyMetadata( DoSomethingWhenTouched_PropertyChanged));
private static void DoSomethingWhenTouched_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var uiElement = (UIElement)d;
//unsibscribe firt to avoid multiple subscription
uiElement.PreviewTouchUp -=uiElement_PreviewTouchUp;
if ((bool)e.NewValue){
uiElement.PreviewTouchUp +=uiElement_PreviewTouchUp;
}
}
static void uiElement_PreviewTouchUp(object sender, System.Windows.Input.TouchEventArgs e)
{
//you logic goes here
}
//methods required by wpf conventions
public static bool GetDoSomethingWhenTouched(UIElement obj)
{
return (bool)obj.GetValue(DoSomethingWhenTouchedProperty);
}
public static void SetDoSomethingWhenTouched(UIElement obj, bool value)
{
obj.SetValue(DoSomethingWhenTouchedProperty, value);
}
}