gpt4 book ai didi

c# - 如何使用 lambda 语句在 WPF 中初始化 UIPropertyMetaData

转载 作者:太空宇宙 更新时间:2023-11-03 18:29:30 24 4
gpt4 key购买 nike

我知道这是基本的,但我不明白。我只是希望使用 lambda 运算符将依赖属性 Dashes 初始化为双集合。

什么是正确的语法?

谢谢。

public static readonly DependencyProperty DashesProperty =
DependencyProperty.Register("Dashes", typeof(DoubleCollection), typeof(CustomTextBlock),
new UIPropertyMetadata(
() =>
{
DoubleCollection d = new DoubleCollection();
d.Add(4);
d.Add(4);
return d;
}
));

最佳答案

首先,您应该避免在 DP 元数据中传递引用类型的默认值,因为这将在您不希望的包含类的所有实例之间共享。

比如说,您声明了两个 CustomTextBlock 实例,那么这两个实例将引用同一个列表,并且列表中的任何修改对这两个实例都是透明的。除非您从构造函数或其他地方明确设置它。

Be careful with default values of DP for reference types.


无论如何,如果您仍然想要它,请按以下方式完成:

new UIPropertyMetadata(new DoubleCollection() { 4, 5 })

更新:

如果您在元数据中传递默认值,则 DoubleCollection 会自动卡住,即在这种情况下您无法从集合中添加/删除。

var dashesCollection = new CustomTextBlock().Dashes.Add(5); // Will throw exception.

但是,如果您从构造函数中显式设置它,它不会被标记为 Frozen,并且可以从集合中添加/删除项目。

var dashesCollection = new CustomTextBlock().Dashes.Add(5); // Works fine.

因此,本质是在构造函数中设置值,而不是在 DP 标识符的元数据中设置值

关于c# - 如何使用 lambda 语句在 WPF 中初始化 UIPropertyMetaData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25751393/

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