• WPF依赖属性和附加属性快速理解


    在写代码的时候,有时候我们需要给现有的控件添加一个属性,然后用这个属性记录一些别的值,这时候我们可以继承这个控件,然后再这个控件里面写一个属性。例如我们给Button控件添加一个ButtonTag值,代码如下:

    1. public class KButton:Button
    2. {
    3. private string buttonTag;
    4. public string ButtonTag
    5. {
    6. get { return buttonTag; }
    7. set { buttonTag = value; }
    8. }
    9. }
    1. <Grid>
    2. <local:KButton ButtonTag="自定义属性" Click="KButton_Click" x:Name="Button1">local:KButton>
    3. Grid>

    运行效果

    但是我们想给这个自定义的属性绑定一个值呢,例如

    1. <Grid>
    2. <local:KButton ButtonTag="{Binding Message}" Click="KButton_Click" x:Name="Button1">local:KButton>
    3. Grid>

    就会报如下错误,此时我们就需要使用依赖属性

    先看下定义依赖属性的语法:

    1. public string yilaishuxing
    2. {
    3. get { return (string)GetValue(yilaishuxingProperty); }
    4. set { SetValue(yilaishuxingProperty, value); }
    5. }
    6. // Using a DependencyProperty as the backing store for yilaishuxing. This enables animation, styling, binding, etc...
    7. public static DependencyProperty yilaishuxingProperty;
    8. public KButton()
    9. {
    10. yilaishuxingProperty =DependencyProperty.Register("yilaishuxing", typeof(string), typeof(KButton),null);
    11. }

    此时前台界面就可以使用binding了

    <local:KButton yilaishuxing="{Binding Message}" Content="ssss" Click="KButton_Click" x:Name="Button1">local:KButton>

    上面说的是依赖属性,那么什么是附加属性呢,如上ButtonTag是普通的属性,没有办法通过Binding填充数据,此时就可以通过附加属性让ButtonTag支持Binding。代码如下:

     

    1. private string buttonTag;
    2. public string ButtonTag
    3. {
    4. get { return buttonTag; }
    5. set { buttonTag = value; }
    6. }
    7. public static string GetButtonTagMyProperty(DependencyObject obj)
    8. {
    9. return (string)obj.GetValue(ButtonTagMyPropertyProperty);
    10. }
    11. public static void SetButtonTagMyProperty(DependencyObject obj, string value)
    12. {
    13. obj.SetValue(ButtonTagMyPropertyProperty, value);
    14. }
    15. // Using a DependencyProperty as the backing store for ButtonTagMyProperty. This enables animation, styling, binding, etc...
    16. public static readonly DependencyProperty ButtonTagMyPropertyProperty =
    17. DependencyProperty.RegisterAttached("ButtonTag", typeof(string), typeof(KButton), null);

    这样只需要再ButtonTag下面加一个附加属性并且绑定ButtonTag,此时ButtonTag就可以支持绑定了,依赖属性和附加属性就这么点东西。

  • 相关阅读:
    python 正则的简单用法
    33:第三章:开发通行证服务:16:使用Redis缓存用户信息;(以减轻数据库的压力)
    vue2 - SuperMap3D实现自定义标记点位和自定义弹窗功能
    JavaScript-修炼之路第七层
    Linux内核--链表结构
    设计模式之抽象工厂
    Kubernetes kustomize 技术从入门到企业实战(下)
    STM32 ADC基础知识讲解
    后端学习 -gRPC
    torch.hub.load()函数的使用——联网加载权重以及如何加载本地权重
  • 原文地址:https://blog.csdn.net/qq_40098572/article/details/126776473