WPF DependencyObject

简介:

          DependencyObject 类表示参与依赖属性系统的对象。属性系统的主要功能是计算属性的值,并提供有关已更改的值的系统通知。 参与属性系统的另一个类 DependencyProperty。 DependencyProperty 允许将依赖属性注册到属性系统,并提供有关每个依赖属性的标识和信息,而 DependencyObject 为基类,使对象能够使用此依赖属性。

         INotifyPropertyChanged 类用于通知UI刷新,注重的仅仅是数据更新后的通知。DependencyObject 类用于给UI添加依赖和附加属性,注重数据与UI的关联。如果简单的数据通知,两者都可以实现的。

 

介绍:

  1. 依赖属性。 通过调用 Register 方法,并将该方法的返回值存储为类中的公共静态字段,来注册依赖属性。
  2. 附加属性。 通过调用 RegisterAttached 方法,并将该方法的返回值存储为类中的公共静态只读字段,来注册附加属性。 
  3. 获取、设置和清除 DependencyObject上存在的任何依赖项属性的值的实用工具方法。
  4. 元数据、强制值支持、属性更改通知和替代依赖属性或附加属性的回调。 此外,DependencyObject 类简化了依赖属性的每个所有者的属性元数据。
  5. 是 ContentElementFreezable或 Visual派生类的基类。 

 

使用:

通过TextBox的Text数据改变TextBlock的字体。

输入“propdp”,按“Tab”键会自动生成。

    public class PersonDP : DependencyObject
    {
        public int MyFont
        {
            get { return (int)GetValue(MyFontProperty); }
            set { SetValue(MyFontProperty, value); }
        }

        // Using a DependencyProperty as the backing store for MyProperty.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty MyFontProperty =
            DependencyProperty.Register("MyFont", typeof(int), typeof(PersonDP),
                    new PropertyMetadata((int)20,
                                         new PropertyChangedCallback(OnValueChanged),
                                         new CoerceValueCallback(OnValueCallback)),
                    new ValidateValueCallback(OnValidateValue));
   
        //首先数据验证
        private static bool OnValidateValue(object value)
        {
            return (int)value != 0;
        }

        //其次数据改变
        private static object OnValueCallback(DependencyObject d, object baseValue)
        {
            if((int)baseValue > 200) { baseValue = 200; }
            return baseValue;
        }

        //最后数据回调
        private static void OnValueChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)
        {
            MessageBox.Show("Font Size: " + e.NewValue.ToString());
        }

    }
    <Window.Resources>
        <local:PersonDP x:Key="p"></local:PersonDP>
    </Window.Resources>
    <Grid>
        <StackPanel>
            <TextBox x:Name="tbx" Text="{Binding Source={StaticResource p},Path=MyFont,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></TextBox>
            <TextBlock Text="{Binding ElementName=tbx,Path=Text}" FontSize="{Binding ElementName=tbx,Path=Text}" ></TextBlock>
        </StackPanel>
    </Grid>

结果: 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值