首页 > 其他 > 详细

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

时间:2014-03-04 12:20:47      阅读:382      评论:0      收藏:0      [点我收藏+]

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

    classAttach
    {
        publicstaticbool GetIsEnabled(DependencyObject obj)
        {
            return (bool)obj.GetValue(IsEnabledProperty);
        }

        publicstaticvoid SetIsEnabled(DependencyObject obj, bool value)
        {
            obj.SetValue(IsEnabledProperty, value);
        }

        publicstaticreadonlyDependencyProperty IsEnabledProperty =
            DependencyProperty.RegisterAttached("IsEnabled", typeof(bool), typeof(Attach), newPropertyMetadata(false));
    }

在XAML中使用的方式如下:

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

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

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

    classAttach
    {
        publicstaticbool GetIsEnabled(DependencyObject obj)
        {
            return (bool)obj.GetValue(IsEnabledProperty);
        }

        publicstaticvoid SetIsEnabled(DependencyObject obj, bool value)
        {
            obj.SetValue(IsEnabledProperty, value);
        }

        publicstaticreadonlyDependencyProperty IsEnabledProperty =
            DependencyProperty.RegisterAttached("IsEnabled
Property", typeof(bool), typeof(Attach), newPropertyMetadata(false));
    }

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

WPF附加属性的Set函数不调用的问题,布布扣,bubuko.com

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

原文:http://www.cnblogs.com/TianFang/p/3579174.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!