2017-01-01 2 views
1

ThumbSliderにしようとしています。なぜ起動時にコントロールのテンプレートがnullですか?

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

Templateがヌルであるため、NREがスローされます。アプリケーションの起動時に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; 
} 
関連する問題