2017-01-01 9 views
1

Я пытаюсь получить Thumb из Slider.Почему шаблон управления при запуске имеет значение null?

_thumb = ((Track)AssociatedObject.Template.FindName("PART_Track", AssociatedObject))?.Thumb; 

Это проливает NRE, потому что Template является недействительным. Почему Template имеет значение null при запуске приложения? и как я могу это исправить?

Я попытался код ниже

AssociatedObject.ApplyTemplate(); // no effect. returns false. 
var template = AssociatedObject.Template; // returns null. 

Даже если я применяю шаблон его еще пустой.

Раньше я был надменным слайдером OnApplyTemplate и шаблоном не было null.

public override void OnApplyTemplate() 
{ 
    // works fine. 
    _thumb = ((Track)this.Template.FindName("PART_Track", this))?.Thumb; 
    base.OnApplyTemplate(); 
} 

Но теперь я пытаюсь создать поведение для слайдера, а не создавать подкласс, так что я не могу отменить. Любая идея, как это исправить?

ответ

1

О, я мог бы использовать событие Loaded и получить Thumb там.

AssociatedObject.Loaded += AssociatedObjectOnLoaded; 

private void AssociatedObjectOnLoaded(object sender, RoutedEventArgs routedEventArgs) 
{ 
    _thumb = ((Track)AssociatedObject.Template.FindName("PART_Track", AssociatedObject))?.Thumb; 
}