zoukankan      html  css  js  c++  java
  • 使用UIElement.AddHandler捕获已被处理的RoutedEvent

    UIElement.AddHandler 方法 (RoutedEvent, Delegate)

    将指定的 路由事件的一路由事件 处理程序,将处理程序添加到当前元素的处理程序集合。

    可以将同一事件多个纪元的同一处理程序,而不引发异常。但是,在中,在处理事件时,处理程序实际调用多次。因此,请考虑此行为如何可能有应考虑在您的处理程序实现的副作用。

    通常使用此方法提供实现 “添加”自定义路由事件的 Microsoft .NET 事件访问模式的访问器。

    MSDN源码:

    // 摘要:
    // 为指定的路由事件添加路由事件处理程序,并将该处理程序添加到当前元素的处理程序集合中。将 handledEventsToo 指定为 true 时,可为已标记为由其他元素在事件路由过程中处理的路由事件调用所提供的处理程序。
    //
    // 参数:
    // routedEvent:
    // 要处理的路由事件的标识符。
    //
    // handler:
    // 对处理程序实现的引用。
    //
    // handledEventsToo:
    // 如果为 true,则将按以下方式注册处理程序:即使路由事件在其事件数据中标记为已处理,也会调用该处理程序;如果为 false,则使用默认条件注册处理程序,即当路由事件已标记为已处理时,将不调用该处理程序。默认值为
    // false。不要例行地请求重新处理路由事件。有关更多信息,请参阅“备注”。
    //
    // 异常:
    // System.ArgumentNullException:
    // routedEvent 或 handler 为 null.
    //
    // System.ArgumentException:
    // routedEvent 不表示支持的路由事件。-或- handler 不实现支持的委托。
    //
    // System.NotImplementedException:
    // 试图为当前平台的变体不支持的事件添加处理程序。
    public void AddHandler(RoutedEvent routedEvent, Delegate handler, bool handledEventsToo);

    1.自我简单通过Button实现代码:

    button1.AddHandler(Button.MouseLeftButtonDownEvent, new MouseButtonEventHandler(myListBox_MouseLeftButtonDown), true);
    
    public void myListBox_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
    MessageBox.Show("Look");
    }

    2.自定义事件支持事件路由

    public class MyButtonSimple: Button
    {
        // Create a custom routed event by first registering a RoutedEventID
        // This event uses the bubbling routing strategy
        public static readonly RoutedEvent TapEvent = EventManager.RegisterRoutedEvent(
            "Tap", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(MyButtonSimple));
    
        // Provide CLR accessors for the event
        public event RoutedEventHandler Tap
        {
                add { AddHandler(TapEvent, value); } 
                remove { RemoveHandler(TapEvent, value); }
        }
    
        // This method raises the Tap event
        void RaiseTapEvent()
        {
                RoutedEventArgs newEventArgs = new RoutedEventArgs(MyButtonSimple.TapEvent);
                RaiseEvent(newEventArgs);
        }
        // For demonstration purposes we raise the event when the MyButtonSimple is clicked
        protected override void OnClick()
        {
            RaiseTapEvent();
        }
    
    }
    <Window  
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:custom="clr-namespace:SDKSample;assembly=SDKSampleLibrary"
        x:Class="SDKSample.RoutedEventCustomApp"
    
        >
        <Window.Resources>
          <Style TargetType="{x:Type custom:MyButtonSimple}">
            <Setter Property="Height" Value="20"/>
            <Setter Property="Width" Value="250"/>
            <Setter Property="HorizontalAlignment" Value="Left"/>
            <Setter Property="Background" Value="#808080"/>
          </Style>
        </Window.Resources>
        <StackPanel Background="LightGray">
            <custom:MyButtonSimple Name="mybtnsimple" Tap="TapHandler">Click to see Tap custom event work</custom:MyButtonSimple>
        </StackPanel>
    </Window>
  • 相关阅读:
    助理需要看的书
    linux 磁盘管理以及维护
    转:工作与创业区别
    《编写可读代码的艺术》---把控制流变得可读
    Visual studio插件 Reshaper--- 常用快捷键
    为啥我喜欢在Windows 7环境下做Unity开发?
    《编写可读代码的艺术》---写出言简意赅的注释
    《编写可读代码的艺术》---该写什么样的注释
    《编写可读代码的艺术》---美观代码
    《编写可读代码的艺术》---不会误解的名字
  • 原文地址:https://www.cnblogs.com/Yukang1989/p/2854971.html
Copyright © 2011-2022 走看看