C# 依赖项属性是类级别或对象级别

C# 依赖项属性是类级别或对象级别,c#,wpf,wpf-controls,dependency-properties,C#,Wpf,Wpf Controls,Dependency Properties,我在挠头理解依赖属性 我的疑问如下: 由于dependency属性被声明为static,static意味着类级属性,因此只会创建一个实例,所有对象都将共享同一个对象 我有一个用户控件,并且向该用户控件添加了依赖项属性IsHighlighted。 此依赖项属性绑定到某个视图模型属性,并且我已注册了一个用于更改依赖项属性值的回调。所以,只要有人更改视图模型属性,就会调用依赖属性回调,如果值为true,它就会启动动画,因为它是一个布尔值 现在,我已经创建了5个对象视图,当我将object1的viewm

我在挠头理解依赖属性

我的疑问如下:

由于dependency属性被声明为static,static意味着类级属性,因此只会创建一个实例,所有对象都将共享同一个对象

我有一个用户控件,并且向该用户控件添加了依赖项属性IsHighlighted。 此依赖项属性绑定到某个视图模型属性,并且我已注册了一个用于更改依赖项属性值的回调。所以,只要有人更改视图模型属性,就会调用依赖属性回调,如果值为true,它就会启动动画,因为它是一个布尔值

现在,我已经创建了5个对象视图,当我将object1的viewmodel属性设置为true时,动画将针对最后一个节点object5而不是object1运行。视图模型的属性是非静态的

我感到困惑的是,依赖项属性将为每个对象创建,或者为所有对象创建一个

如果所有对象都是单一的,那么我需要对其运行模拟,因为对于用户控件中的普通CLR属性,不会调用任何更改处理程序,所以跟踪用户控件属性中的更改的方法是什么

总结: 依赖项属性是在类级别或对象级别创建的。
如果它是在类级别创建的,因为它被声明为静态的,那么如何创建一个在对象级别(非静态)但不会对普通CLR属性进行任何值更改回调的属性呢。那么如何做到这一点。

当您查看如何定义依赖项属性时,您很快就会注意到它不是一个常见的静态属性,它更多的是通过设置元数据来描述属性,而不是像使用简单的常用静态属性那样指定纯值。该元数据正在DependencyObjects内部使用(wpf中的每个控件都从DependencyObject甚至UserControls继承)

每个DependencyObject对该元数据所做的是为dependency属性管理自己的值

这就是object5仅更改值而不是每个对象的方式

我希望这张照片现在对你来说更清楚一点

顺便说一句,我还提到了用户nit给你的链接


去看看。

也许这个答案有助于你理解它。。。