0

我正在使用 xaml 和 ControlTemplate 如下:

<ControlTemplate TargetType="{x:Type local:MyControl}" x:Key="MyControlTemplate">

    <Grid Background="Transparent" Name="DisplayGrid"  >


        <local:MyDisplay x:Name="DisplayInstance" />
        <ContentPresenter   />


     </Grid>

</ControlTemplate>

代码:

public class MyControl : UserControl
{

    ....
    ....
    ....
    public MyControl()
    {
         Template = (ControlTemplate)Resources["MyControlTemplate"];

         MyDisplay display = Template.FindName("DisplayInstance", this);
         // It return null
    }


}

我想在模板中获取并设置“DisplayInstance”。我尝试了官方方法(使用 Template.FindName(string, Fr​​ameworkElement)),但它总是返回 null。

那么,我应该如何获取和修改 ControlTemplate/Xaml 中的“DisplayInstance”和任何其他控件?这样 ControlTemplate 的内容会在运行时发生变化。

谢谢你。

4

1 回答 1

0

在您的自定义控件中覆盖OnApplyTemplate方法并将依赖于命名控件的代码放置在其中。例如尝试:

public override void OnApplyTemplate() {
        base.OnApplyTemplate();

        MyDisplay display = Template.FindName("DisplayInstance", this); 
    }
于 2012-05-11T03:44:16.620 回答