WPF附加属性的Set函数不调用的问题-阿里云开发者社区

开发者社区> 杰克.陈> 正文

WPF附加属性的Set函数不调用的问题

简介: 原文:WPF附加属性的Set函数不调用的问题 今天写程序的时候用到了附加属性,我是用VS内置的propa的代码段来实现的,代码如下:     class Attach    {        public static bool GetIsEnabl...
+关注继续查看
原文:WPF附加属性的Set函数不调用的问题

今天写程序的时候用到了附加属性,我是用VS内置的propa的代码段来实现的,代码如下:

    class Attach
    {
        public static bool GetIsEnabled(DependencyObject obj)
        {
            return (bool)obj.GetValue(IsEnabledProperty);
        }

        public static void SetIsEnabled(DependencyObject obj, bool value)
        {
            obj.SetValue(IsEnabledProperty, value);
        }

        public static readonly DependencyProperty IsEnabledProperty =
            DependencyProperty.RegisterAttached("IsEnabled", typeof(bool), typeof(Attach), new PropertyMetadata(false));
    }

在XAML中使用的方式如下:

    <Grid local:Attach.IsEnabled="true" x:Name="grid" />

但是,调试的时候却发现一个问题:虽然附加属性的值的读取和写入都没有什么问题,但是按理说Attach.SetIsEnabled函数在启动的时候应该会调用一次在对,但却断点断不到。加入属性变更的回调通知时,回调函数也能正常的运行

我在网上找了一些示例代码,发现有有的断点能断到Set函数中,有的却不行。然后就将示例代码和我的代码一一比较,最后发现只要在注册附加属性的名称后面加一个"Property"就可以了。改成如下所示

    class Attach
    {
        public static bool GetIsEnabled(DependencyObject obj)
        {
            return (bool)obj.GetValue(IsEnabledProperty);
        }

        public static void SetIsEnabled(DependencyObject obj, bool value)
        {
            obj.SetValue(IsEnabledProperty, value);
        }

        public static readonly DependencyProperty IsEnabledProperty =
            DependencyProperty.RegisterAttached("IsEnabled
Property", typeof(bool), typeof(Attach), new PropertyMetadata(false));
    }

最开始我以为是VS提供的代码段有问题,导致我生成了错误的代码,便到MSDN上去查了一下,发现MSDN的示例代码页也没有"Property"后缀(地址:附加属性概述)。也就是说,自动生成的不带"Property"后缀才是正统形式。虽然两种形式的执行结果都是一样的,但是默认的这种第一次不掉用Set函数行为肯定是有问题的。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
深析静态链接库和动态链接库相同函数覆盖及库调用顺序问题
注意:编译器为gcc,若使用g++,请在库里面加上extern “C”    两个静态库    首先测试静态链接库,大概的代码如下:    liba.c #include   #include   #include "libA.
1774 0
image的srcset属性
介绍 响应式页面中经常用到根据屏幕密度设置不同的图片。这个时候肯定会用到image标签的srcset属性。srcset属性用于设置不同屏幕密度下,image自动加载不同的图片。
750 0
Angular Component class属性初始化和构造函数执行的先后顺序
Angular Component class属性初始化和构造函数执行的先后顺序
15 0
[实变函数]2.3 开集 (open set), 闭集 (closed set), 完备集 (complete set)
1        $$\beex \bea E\mbox{ 是开集}&\lra E^o=E\\        &\lra \forall\ P_0\in E,\ \exists\ U(P_0)\subset E.
905 0
oracle查找索引及表的其它属性
1、查找表的所有索引(包括索引名,类型,构成列):select t.*,i.index_type from user_ind_columns t,user_indexes i where t.index_name = i.
492 0
C#调用C函数(DLL)传递参数问题
备忘: 1.C函数参数为字符串char*。如果是入参,对应C#中string或StringBuilder;如果是出参对应C#中StringBuider;   2.C函数参数为结构体指针,需在C#中对应定义结构体。
907 0
+关注
杰克.陈
一个安静的程序猿~
10427
文章
2
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载