为什么控制模板在启动时为空?
Why Template of control is null at startup?
我正在尝试获取 Thumb
个 Slider
。
_thumb = ((Track)AssociatedObject.Template.FindName("PART_Track", AssociatedObject))?.Thumb;
这将引发 NRE,因为 Template
为空。为什么 Template
在应用程序启动时为空?我该如何解决?
我试过下面的代码
AssociatedObject.ApplyTemplate(); // no effect. returns false.
var template = AssociatedObject.Template; // returns null.
即使我应用了模板,它仍然是空的。
之前我覆盖了滑块 OnApplyTemplate
并且模板不为空。
public override void OnApplyTemplate()
{
// works fine.
_thumb = ((Track)this.Template.FindName("PART_Track", this))?.Thumb;
base.OnApplyTemplate();
}
但现在我正在尝试为 Slider 创建 Behavior 而不是创建子类,所以我无法重写。知道如何解决这个问题吗?
哦,我可以使用 Loaded
事件并将 Thumb 放在那里。
AssociatedObject.Loaded += AssociatedObjectOnLoaded;
private void AssociatedObjectOnLoaded(object sender, RoutedEventArgs routedEventArgs)
{
_thumb = ((Track)AssociatedObject.Template.FindName("PART_Track", AssociatedObject))?.Thumb;
}
我正在尝试获取 Thumb
个 Slider
。
_thumb = ((Track)AssociatedObject.Template.FindName("PART_Track", AssociatedObject))?.Thumb;
这将引发 NRE,因为 Template
为空。为什么 Template
在应用程序启动时为空?我该如何解决?
我试过下面的代码
AssociatedObject.ApplyTemplate(); // no effect. returns false.
var template = AssociatedObject.Template; // returns null.
即使我应用了模板,它仍然是空的。
之前我覆盖了滑块 OnApplyTemplate
并且模板不为空。
public override void OnApplyTemplate()
{
// works fine.
_thumb = ((Track)this.Template.FindName("PART_Track", this))?.Thumb;
base.OnApplyTemplate();
}
但现在我正在尝试为 Slider 创建 Behavior 而不是创建子类,所以我无法重写。知道如何解决这个问题吗?
哦,我可以使用 Loaded
事件并将 Thumb 放在那里。
AssociatedObject.Loaded += AssociatedObjectOnLoaded;
private void AssociatedObjectOnLoaded(object sender, RoutedEventArgs routedEventArgs)
{
_thumb = ((Track)AssociatedObject.Template.FindName("PART_Track", AssociatedObject))?.Thumb;
}