【问题标题】:Why Template of control is null at startup?为什么控制模板在启动时为空?
【发布时间】:2017-01-01 00:48:02
【问题描述】:

我正在尝试获取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 而不是创建子类,因此我无法覆盖。任何想法如何解决这个问题?

【问题讨论】:

    标签: c# wpf wpf-controls expression-blend


    【解决方案1】:

    哦,我可以使用 Loaded 事件并在那里获取 Thumb。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-05
      • 1970-01-01
      • 2017-09-30
      • 1970-01-01
      • 2017-05-06
      • 1970-01-01
      相关资源
      最近更新 更多