如何覆盖用户控件中的onTouchUp,该控件不仅可用于激发此用户控件上的事件,还可用于激发整个应用程序上的事件



我是C#和WPF的新手。现在,我想覆盖用户控件中的onTouchUp事件。然后我可以在引用中添加用户控件以供重用。问题是,每次我想在应用程序上测试这个事件时,该事件只在用户控制区域触发,而不是在整个屏幕上。有人能解决这个问题吗?

基本上,您需要附加到覆盖交互区域的元素上的PreviewTouchUp事件。它也可能是应用程序wnwindows。不建议在窗口外处理鼠标或触摸事件。

下面是一个例子,如何将任何行为直接附加到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);
    }
}

相关内容

  • 没有找到相关文章

最新更新