C# 依赖属性

C# 依赖属性,c#,wpf,C#,Wpf,有谁能解释一下WPF中的依赖属性是什么,以及它的用途是什么。我知道google上有很多关于它的教程,但是它们教你如何创建依赖属性。我不知道在哪里使用它。我的意思是我会在XAML中使用它吗?如果有人能简单地解释我,那就太好了 如果在XAML中显示一个简单的示例,以及如何使用该属性的示例,以及使用该属性后的效果,那就太好了。 非常感谢您的回答。我看到的最好的用法是将属性附加到您无法修改的类。因此,如果您获得了第三方程序集,您可以向类附加额外的信息,并在需要时阅读它们。这可能是描述DPs的最直接的文章

有谁能解释一下WPF中的依赖属性是什么,以及它的用途是什么。我知道google上有很多关于它的教程,但是它们教你如何创建依赖属性。我不知道在哪里使用它。我的意思是我会在XAML中使用它吗?如果有人能简单地解释我,那就太好了

如果在XAML中显示一个简单的示例,以及如何使用该属性的示例,以及使用该属性后的效果,那就太好了。
非常感谢您的回答。

我看到的最好的用法是将属性附加到您无法修改的类。因此,如果您获得了第三方程序集,您可以向类附加额外的信息,并在需要时阅读它们。

这可能是描述DPs的最直接的文章:


就我个人而言,当我需要公开属性以便通过XAML对它们进行数据绑定时,我最常使用它们。例如,如果我创建了一个要在XAML中使用的UserControl,并且我想通过XAML在UserControl上设置一个属性,那么我会将其作为依赖项属性公开。

您要寻找的是WPF的释放。这是一个免费的示例章节。

依赖项属性不将其值存储在字段中,而是存储在某个哈希表中。因此,它需要更少的内存,这对GUI对象尤其重要,因为大多数属性将保留其默认值,因此这些属性不会占用更多内存。但依赖项属性的速度要慢一些,这是因为在对象之间来回装箱以及在哈希表中查找

依赖对象框架还允许许多功能,如更改通知等。我在这里找到了一个很好的资源来解释内部工作:


我同意声明它们的语法有点难看,但您可以创建帮助程序来减轻这一点。

列出的许多链接应该能让您很好地了解依赖属性是什么,但一般来说,我认为最简单的方法是:

如果您希望能够使用WPF的数据绑定来绑定用户界面元素的属性,那么依赖属性就是您需要用于这些元素的属性。为了成为数据绑定操作的“目标”,您需要将该属性设置为依赖属性

在实现标准类(成为“控件”的DataContext)时,需要使用INotifyPropertyChanged而不是DPs。这允许该类成为绑定“源”

一般来说,如果您正在制作一些将绑定到XAML中的内容,例如UIelement的
Target
,那么您只需要创建依赖项属性。例如,假设我们有如下XAML:

<local:MyControl ControlProperty="{Binding SomeProperty}" />


通常,
ControlProperty
将是一个Dep.属性,因为它是绑定目标,而SomeProperty将是实现INotifyPropertyChanged的类中的标准CLR属性(而不是DP)。

这是附加属性,它只是依赖属性的一种形式,通常被认为是独立的。因此,当lastname从test1更改为test2时,是否将字体从绿色更改为黄色?仅仅是一个例子..好吧-即使只是显示姓氏。以“TextBlock”控件为例,“Text”属性是一个依赖性属性,这就是为什么您可以这样做:@developer:LastName可以是类的普通属性,但Text必须是一个依赖性属性才能成为绑定的“目标”-即:您在XAML中绑定到的对象。您还可以解释一下值是如何设置的吗。在下面的示例中,公共类Person:DependencyObject{public static readonly DependencyProperty LastNameProperty=DependencyProperty.Register(“LastName”、typeof(string)、typeof(Person));公共字符串LastName{get get{return(string)GetValue(LastNameProperty);}set{SetValue(LastNameProperty,value);}}}}}value属性是如何设置的?我将使用什么样的xaml。上面是一个谷歌示例。@developer:default调用Register时,可以在元数据中指定值-这是从未调用set时将具有的值。实际值由DependencyObject.SetValue()设置,这就是CLR属性需要包装该值的原因。部分重复: