为什么控制模板在启动时为空?

Why Template of control is null at startup?

我正在尝试获取 ThumbSlider

_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;
}