我正在创建一个WinRT CustomControl,它具有PropertyChangedCallback的依赖属性。在那个Callback方法中,我尝试使用GetTemplateChild()方法设置我从OnApplyMethod检索的一些控件部分的值。
问题是在OnApplyTemplate之前调用了PropertyChangedCallback,因此控件部分仍为空。
我发现一个解决方法是我在自定义控件的加载事件中调用此DP。在那种情况下,一切都适合我。但是每种情况都不适用。假设有人想要通过xaml绑定值,问题再次引发。
是否有任何针对此问题的永久性解决方法。
答案 0 :(得分:4)
这是我想要做你所描述的一般模式:
private void OnFooChanged(...)
{
if (someNamedPart != null && someOtherNamedPart != null && ...)
{
// Do something to the named parts that are impacted by Foo
// when Foo changes.
}
}
private void FooChangedCallback(...)
{
// Called by WinRT when Foo changes
OnFooChanged(...)
}
protected override void OnApplyTemplate(...)
{
// Theoretically, this can get called multiple times - every time the
// consumer of this custom control changes the template for this control.
// If the control has named parts which must react to the properties
// this control exposes, all that work must be done here EVERY TIME
// a new template is applied.
// Get and save named parts as local variables first
OnFooChanged(...)
}
希望伪代码有帮助!