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

作者:天方 时间:2022-09-27 09:52:38 

今天写程序的时候用到了附加属性,我是用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("IsEnabledProperty", typeof(bool), typeof(Attach), new PropertyMetadata(false));
   }

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

来源:https://www.cnblogs.com/TianFang/p/3579174.html

标签:WPF,附加,属性,Set,函数,不调用
0
投稿

猜你喜欢

  • Kotlin协程低级api startCoroutine与ContinuationInterceptor

    2022-05-04 21:45:50
  • 详解java中产生死锁的原因及如何避免

    2022-04-22 00:36:14
  • java实现斗地主发牌系统

    2023-06-11 01:48:40
  • C#遍历DataSet控件实例总结

    2022-11-13 15:22:36
  • Android实现Activity界面切换添加动画特效的方法

    2021-07-11 08:02:35
  • java对象序列化与反序列化的默认格式和json格式使用示例

    2021-12-07 18:22:23
  • Android中使用TextView实现文字跑马灯效果

    2023-07-28 11:07:33
  • Android 应用中跳转到应用市场评分示例

    2023-02-14 04:03:22
  • Unity3D实现人物转向与移动

    2022-10-28 08:42:13
  • Android 文件读写操作方法总结

    2023-12-22 22:52:29
  • 基于Java8实现提高Excel读写效率

    2023-11-25 10:01:37
  • Android编程实现的手写板和涂鸦功能

    2022-01-04 19:20:52
  • 关于Spring Data Jpa 自定义方法实现问题

    2023-11-28 10:08:32
  • 详解Java中的final关键字

    2023-02-20 17:29:50
  • java实现发送邮件的示例代码

    2023-07-04 17:00:54
  • Springboot项目中使用redis的配置详解

    2021-11-26 03:43:44
  • SpringCloud搭建netflix-eureka微服务集群的过程详解

    2023-09-02 18:11:52
  • C#数据结构之单链表(LinkList)实例详解

    2021-09-15 21:40:14
  • 详解MyBatis的Dao层实现和配置文件深入

    2022-07-26 02:29:17
  • SpringMVC源码解读之HandlerMapping

    2023-07-23 22:18:05
  • asp之家 软件编程 m.aspxhome.com