WPF教程

WPF:使用RoutedPropertyChangedEventArgs和RoutedPropertyChangedEvhtml教程

时间:2013-6-20 0:53:32  作者:WPF之家  来源:http://www.wpf123.com  查看:276  评论:0
内容摘要:    为了方便常见的针对属性值改变的路由事件,WPF提供了定义此类路由事件的辅助类型。分别是泛型RoutedPropertyChangedEventHandler委托来定义此类路由事件的委托类型。另一个类型是RoutedPropertyChangedEventArgs泛型类型来...
  

  为了方便常见的针对属性值改变的路由事件,WPF提供了定义此类路由事件的辅助类型。分别是泛型RoutedPropertyChangedEventHandler委托来定义此类路由事件的委托类型。另一个类型是RoutedPropertyChangedEventArgs泛型类型来定义此类路由事件的自定义EventArgs。

  它们的使用非常方便,泛型类型参数就是相应属性值的类型。另外RoutedPropertyChangedEventArgs还改写了RoutedEventArgs.InvokeEventHandler方法,这样执行更有效率。

  比如定义一个路由事件IdChanged(代表Id属性改变),使用RoutedPropertyChangedEventHandler指定委托类型:

    class a: UIElement

    {

        #region 路由事件IdChanged

 

        //注册路由事件

        public static readonly RoutedEvent IdChangedEvent = EventManager.RegisterRoutedEvent("IdChanged",

            RoutingStrategy.Bubble, typeof(RoutedPropertyChangedEventHandler<int>), typeof(a));

 

        //CLR事件包装

        public event RoutedEventHandler IdChanged

        {

            add { AddHandler(IdChangedEvent, value); }

            remove { RemoveHandler(IdChangedEvent, value); }

        }

 

        #endregion

 

 

    }

  接下来就是定义Id依赖属性,在依赖属性的属性值改变方法中(PropertyMetadata.PropertyChangedCallback)运行路由事件,使用RoutedPropertyChangedEventArgs:

    class a : UIElement

    {

        #region 依赖属性Id

 

        //注册依赖属性

        public static readonly DependencyProperty IdProperty =

            DependencyProperty.Register("Id"typeof(int), typeof(a),

                new PropertyMetadata((int)0,

                    new PropertyChangedCallback(OnIdChanged)));

 

        //CLR属性包装

        public int Id

        {

            get { return (int)GetValue(IdProperty); }

            set { SetValue(IdProperty, value); }

        }

 

        //静态OnChanged

        private static void OnIdChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)

        {

            a target = (a)d;

            int oldId = (int)e.OldValue;

            int newId = target.Id;

            target.OnIdChanged(oldId, newId);

        }

 

        //非静态OnChanged

        protected virtual void OnIdChanged(int oldId, int newId)

        {

            //调用路由事件

            RaiseEvent(new RoutedPropertyChangedEventArgs<int>(oldId, newId));

        }

 

        #endregion

 

    }

  本文来自刘圆圆的博客,原文地址:http://www.cnblogs.com/mgen/archive/2012/01/09/2317565.html


标签:content= 

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。本文出自“wpf之家”,请务必保留此出处:http://www.wpf123.com

相关评论
Copyright © 2009-2014 WPF之家(http://www.wpf123.com/) All rights reserved
 Powered by WPF之家
鄂ICP备13006396号