zoukankan      html  css  js  c++  java
  • 附加事件

    个人理解:

    讲在前面,本人觉得附加属性如果不和事务处理在一起,或者不是由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));
            }
    
            
        }
  • 相关阅读:
    UIProgressView的详细使用
    Android拍照上传代码样例
    UILabel的详细使用及特殊效果
    TextView属性android:ellipsize实现跑马灯效果
    Android中WebView实现Javascript调用Java类方法
    有效获取状态栏(StatusBar)高度
    详解iPhone Tableview分批显示数据
    TextView显示插入的图片
    ObjectiveC语法快速参考
    UISegmentedControl的详细使用
  • 原文地址:https://www.cnblogs.com/T-ARF/p/10447078.html
Copyright © 2011-2022 走看看