我正在设计一个用户控件,我想让它的行为可配置 - 但只有一次,当它被创建时。我以后不需要它来适应,因为我事先知道特定窗口将使用特定配置来使用它。
考虑这个简单的标记:
<MyControl SomeProperty="True" SomeOtherProperty="12345" />
SomeProperty
并且SomeOtherProperty
是在我的代码隐藏中声明的 DependencyProperties。
InitializeComponent()
问题是:在调用之前,控件在其构造函数中对其输入数据进行了一些预处理。在那个阶段,我无权访问SomeProperty
或SomeOtherProperty
由用户定义 - 他们仍然具有默认值。
之后,如果在 XAML 中设置了这些属性,则会在构造函数之后为它们分配值。我可以通过引入 a 来响应它们,PropertyChangedCallback
并在每个属性更新后再次执行计算。
这是次优的,因为我只想传递一次值并确保控件的初始化逻辑也只运行一次 - 已经使用正确的设置。s的解决方案PropertyChangedCallback
要求我使这个控件更复杂,即在控件的整个生命周期内对这些依赖属性的任何更改做出响应。这比我需要的要多得多——如果我的属性是只读的并且在控件创建时只设置一次就可以了。
如何在保持 XAML 标记干净的同时做到这一点?