代码之家  ›  专栏  ›  技术社区  ›  RezaNoei

如何等待ControlTemplate应用于控件WPF

  •  0
  • RezaNoei  · 技术社区  · 6 年前

    我在自定义控件中添加了一个函数 AddColumn

     public void AddColumn(string ColumnHeader)
     {
         Grid MainGrid = this.Template.FindName("MainGrid", this) as Grid;
         Border Header = this.Template.FindName("header", this) as Border;
    
         if (MainGrid != null)
         {
    
             MainGrid.Children.Add(HeaderText);
             // ...
    
             MainGrid.ColumnDefinitions.Add(new ColumnDefinition() { Width = 
             MainGrid.Children.Add(...);
             // ...
             GridSplitter Splitter = new GridSplitter() { HorizontalAlignment 
             MainGrid.Children.Add(Splitter);
             // ...
             Grid.SetColumnSpan(Header, ColumnCounter-1);
         }
     }
    

    在这个方法中,如您所见,有两个ControlTemplate项调用。

    在模板化作业完成之前,我不能使用此方法。我的ControlTemplate是全局的,我不知道应该在哪里等待它。

    我能否以正确的方式等待或应用ControlTemplate,以便在需要时调用此方法?

    1 回复  |  直到 6 年前
        1
  •  1
  •   BradleyDotNET Aniss    6 年前

    答案是您的控件应重写 OnApplyTemplate ( MSDN )

    frameworkelement的派生类可以将此方法用作各种可能情况的通知:

    • 您可以调用自己的代码实现来构建元素可视化树的其余部分。

    • 可以运行依赖已应用模板的可视化树的代码,例如获取对来自模板的命名元素的引用。

    • 您可以引入只有在模板的可视化树完成后才有意义的服务。

    • 可以设置模板中依赖于其他因素的元素的状态和属性。例如,属性值可能只能通过了解父元素或特定的派生类何时使用公共模板来发现。

    但是,在不了解您的用例的情况下,我强烈怀疑这是一个xy问题,您真的需要某种约束 ItemsControl 相反。