gpt4 book ai didi

wpf - 依赖属性如何告诉对象适用?

转载 作者:行者123 更新时间:2023-12-04 17:22:20 25 4
gpt4 key购买 nike

(我对这个概念完全陌生,所以我可能会问非常基本的问题。)

使用以下代码注册依赖项属性:

public static DependencyProperty Register(string name, Type propertyType, Type ownerType, PropertyMetadata typeMetadata);

从逻辑上讲,它只是将属性名称与所有者类型相关联。

因此,如果我有多个所有者类型的实例,并且每个实例将 DP 设置为不同的值。

如何存储这些值?

更新 1 - 10/30/2013 上午 10:04

我从这里阅读了有关附加属性(property)的信息: http://wpftutorial.net/DependencyProperties.html

Attached Properties

Attached properties are a special kind of DependencyProperties. They allow you to attach a value to an object that does not know anything about this value.

A good example for this concept are layout panels. Each layout panel needs different data to align its child elements. The Canvas needs Top and Left, The DockPanel needs Dock, etc. Since you can write your own layout panel, the list is infinite. So you see, it's not possible to have all those properties on all WPF controls.

The solution are attached properties. They are defined by the control that needs the data from another control in a specific context. For example an element that is aligned by a parent layout panel.



所以在下面的代码片段中:
<Canvas>
<Button Canvas.Top="20" Canvas.Left="20" Content="Click me!"/>
<Button Canvas.Top="40" Canvas.Left="20" Content="Click me!"/>
</Canvas>

显然我们不能给出所有的对齐属性,例如 顶部 , 到按钮。所以 Canvas 定义了这样的属性,它们是“ 附加 ”到 Button 控件。

当 Canvas.Top 在 XAML 中被指定为 Button 的“属性”时,它将调用在 Canvas 类型中定义的 SetTop() 方法。按钮作为元素参数传入。
我认为这就是 Canvas 知道哪个 Button 使用哪个 Top 值的方式。
public static void SetTop(UIElement element, double length);

但我不明白为什么附加属性(property)必须是依赖属性(property)? 他们之间有什么联系?

谢谢!

最佳答案

通常当我们定义一个 DependencyProperty ,我们还定义了一个 CLR 'wrapper',使我们能够使用 DependencyProperty在代码中:

public static readonly DependencyProperty ItemsProperty = DependencyProperty.Register(
"Items", typeof(ObservableCollection<string>), typeof(MainWindow),
new UIPropertyMetadata(new ObservableCollection<string>()));

public ObservableCollection<string> Items
{
get { return (ObservableCollection<string>)GetValue(ItemsProperty); }
set { SetValue(ItemsProperty, value); }
}

在这里您可以看到 GetValueSetValue @Clemens 正在谈论的方法。我们可以在 Window 中访问这些方法和/或 UserControl因为它们都扩展了 DependencyObject类(class)。您还可以看到 Items这里的属性(property)不是 static ...这只是 DependencyProperty 的定义即 static .

更新 >>>

询问为什么附加属性必须是 DependencyProperty 并没有多大意义。 ?因为在 .NET 中,它们只是……它们就是这样设计的。一个更好的问题可能是,附加属性从 DependencyProperty 中获得什么好处。 ?

对此的回答与被问及房产从 DependencyProperty 中获得什么好处是一样的。 ?主要好处是这些属性可以在 Binding 中使用。 s, Style s, Animation s 和 Resources除其他事项外。对于任何 WPF 开发人员,可以从 MSDN 上的两个非常重要的页面(已在评论中链接到)中找到更多详细信息:

Dependency Properties Overview

Attached Properties Overview

关于wpf - 依赖属性如何告诉对象适用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19662525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com