zoukankan      html  css  js  c++  java
  • xaml中的依赖属性

    wpf使用依赖属性完成数据绑定、动画、属性变更通知、样式化等。对于数据绑定。绑定到.NET属性源上的UI元素的属性必须是依赖属性

    .net的一般属性定义如下

            private int val;
            public int Value
            {
                get
                {
                    return val;
                }
                set
                {
                    val = value;
                }
            }

    而依赖属性的定义形式如下

    public class MyDependencyObject : UIElement

    {

            public int Value
            {
                get { return (int)GetValue(ValueProperty); }
                set { SetValue(ValueProperty, value); }
            }

    }

    当然到此并没有完成依赖属性的定义,其中ValueProperty是一个DependencyProperty类型的静态成员。

    其定义形式如下

            public static readonly DependencyProperty ValueProperty =
                DependencyProperty.Register("Value", typeof(int), typeof(MyDependencyObject),new PropertyMetadata(0,null,CoerceValue));

    为了更方便理解注意看到他们的颜色已经和属性定义中的颜色对应起来了

    参数含义依次为:所属属性的名称、所属属性的类型、所属属性属于哪个对象、最后一个参数的构造函数有三个参数,第一个定义属性的默认值、第二定义值变更回调和事件/第三个

    定义强制值回调事件

    可以定义带事件检查的参数,

            public static readonly DependencyProperty ValueProperty =
                DependencyProperty.Register("Value", typeof(int), typeof(MyDependencyObject),new PropertyMetadata(0,OnValueChanged,CoerceValue));

    OnValueChanged是回调时间更改属性值之后调用该事件,在方法中可以获取到属性值更改的最新情况;

    CoerceValue事件主要用于检查对属性的赋值是否满足要求。之两个方法的定义形式如下

            private static object CoerceValue(DependencyObject element,object value)
            {
                int newValue = (int)value;
                MyDependencyObject control = (MyDependencyObject)element;
                newValue= Math.Max(control.Minimum,Math.Min(control.Maximum,newValue));
                return newValue; //返回的这个值将是属性的实际值
            }
            private static void OnValueChanged(DependencyObject obj,DependencyPropertyChangedEventArgs args)
            {
                int oldValue = (int)args.OldValue; //获取属性的原来值
                int newValue = (int)args.NewValue;//获取属性的最新改动值
            }

    通过上面例子也能体会出两个事件的各自作用

  • 相关阅读:
    发一个使用 GridView 对数据小类进行分别汇总的例子
    C#根据当前时间确定日期范围(本周、本月、本季度、本年度)
    软件开发人员的作战手册
    C#服务常用继成函数说明
    ServiceController控制windows服务
    不做沙和尚
    C#多线程(二) 如何操纵一个线程转
    C#多线程(一) 多线程的相关概念
    如何为windows服务添加安装程序(转)
    用C#开发Windows服务、自动安装注册(转)
  • 原文地址:https://www.cnblogs.com/tianmochou/p/5299763.html
Copyright © 2011-2022 走看看