• 附加事件


    个人理解:

    讲在前面,本人觉得附加属性如果不和事务处理在一起,或者不是由Ulement所派生的 ,附属事件的意义很小。

    附加事件不同附加属性。

    附加事件属于路由事件的一种。

    附加事件的引发必须在由Ulement所派生的类,具体而言就是Ulement的RaiseEvent方法引发

    附加事件的类不是由Ulement所派生的,那么不会编写Xaml代码

    附加事件由EventManager.RegisterRoutedEvent注册。

    此方法有四个参数:

    1. 附加事件的唯一名称

    2. 附加事件的路由策略

    3. 附加事件的委托类型

    4. 附加事件的所属

    同样,微软规定了事件的注册标准分别为Add****Handle和Remove****Handle的方法,两个方法的参数数量一致都是两个第一个是DependencyObject 类型,第二个则是和注册时第三个参数相同的类型

    那么给出一个小栗子:

    附加事件类:

    类具有一个公开的属性

    namespace Rou
    {
        public   class NR
        {
            public bool TestProperty { get; set; }
    
    
            public static readonly RoutedEvent TestEvent = EventManager.RegisterRoutedEvent("Test", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(NR));
            public static void AddTestEventHandler(DependencyObject d, RoutedEventHandler handler)
            {
                var u = d as UIElement;
                if (u != null)
                {
                    
                    u.AddHandler(NR.TestEvent, handler);
                }
            }
            public static void RemoveTestEventHandler(DependencyObject d, RoutedEventHandler handler)
            {
                var u = d as UIElement;
                if (u != null)
                {
                    u.RemoveHandler(NR.TestEvent, handler);
                }
            }
            }
        
    }

    xaml代码:

    <Grid>
            <Button Click="Button_Click"  Visibility="Visible" Margin="344,119,357,240"/>
        </Grid>

    cs页面代码:

    public partial class MainWindow : Window
        {
            NR NewNRTest;
    
            public MainWindow()
            {
                InitializeComponent();
                //实例化类
                NewNRTest = new NR
                {
                    TestProperty = false
                };
                //注册事件
                NR.AddTestEventHandler(this, new RoutedEventHandler(TestMenth));
            }
    
            private void TestMenth(object sender, RoutedEventArgs e)
            {
                MessageBox.Show((e.OriginalSource as NR).TestProperty.ToString());
           
            }
    
            private void Button_Click(object sender, RoutedEventArgs e)
            {
                //修改类的属性
                NewNRTest.TestProperty = true;
                //引发事件
                //如果是Ulement派生的类 也差不多要这么写
                this.RaiseEvent(new RoutedEventArgs(NR.TestEvent, NewNRTest));
            }
    
            
        }
  • 相关阅读:
    MySQL 连接的使用:语法及案例剖析、INNER JOIN、LEFT JOIN、RIGHT JOIN
    MySQL GROUP BY 分组语句:语法及案例剖析、使用 WITH ROLLUP
    MySQL 排序:语法及案例剖析、在命令提示符中使用 ORDER BY 子句
    MySQL UNION 操作符:语法及案例剖析
    MySQL LIKE 子句:语法及案例剖析、在命令提示符中使用 LIKE 子句
    maven仓库
    maven安装配置
    Jedis
    Redis下载安装以及String类型
    Redis介绍
  • 原文地址:https://www.cnblogs.com/T-ARF/p/10447078.html
Copyright © 2020-2023  润新知