WPF UserControl预配置

时间:2012-07-30 15:55:18

标签: c# wpf xaml dependency-properties

我正在设计一个用户控件,我想让它的行为可配置 - 但只有一次,当它被创建时。我以后不需要它适应,因为我事先知道特定窗口将使用特定配置。

考虑这个简单的标记:

<MyControl SomeProperty="True" SomeOtherProperty="12345" />

SomePropertySomeOtherProperty是我的代码隐藏中声明的DependencyProperties。

问题是:在调用InitializeComponent()之前,控件在其构造函数中对其输入数据进行一些预处理。在该阶段,我无权访问用户定义的SomePropertySomeOtherProperty - 他们仍然拥有默认值。

之后,如果在XAML中设置了这些属性,则在构造函数之后为它们分配值。我可以通过引入PropertyChangedCallback并在每个属性更新后再次执行计算来回复它们。

这是次优的,因为我只想传递值一次,并确保控件的初始化逻辑也只运行一次 - 已经有正确的设置。使用PropertyChangedCallback的解决方案要求我使此控件更复杂,即在控件的整个生命周期内响应对这些依赖项属性的任何更改。这比我需要的要多得多 - 我的属性只能是只读的,并且只能在控件创建时设置一次。

如何在保持XAML标记清洁的同时设法做到这一点?

1 个答案:

答案 0 :(得分:2)

必须构建您的控件以便WPF设置属性 - 在设置属性之前无法“延迟”构造。

您可能希望尝试将其放在其他位置,例如订阅Loaded event并在那里初始化,而不是将初始化逻辑放在构造函数中。这将在设置属性后发生。