<Style x:Key="abc" TargetType="{x:Type Window}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Window}">
<button x:name="btn">my button!!</button>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
...
<Window ... Style="{StaticResource styleMainWindow}">
如何使用按钮btn
?
达到你的期望,
MessageBox.Show(this.btn1.name);
在编译时发生错误。并且btn1也没有出现在智能感知中。
答案 0 :(得分:1)
在ControlTemplate类上尝试FindName方法。
假设这个是您的Control的上下文:
var button = (Button)this.Template.FindName("btn", this);
答案 1 :(得分:0)
我想mjk6026,你从窗口的实际成员元素中误解了WPF模板。
确实,当我们命名一个不属于任何模板的UI元素(x:Name)时,我们可以在后面的代码中按名称访问该元素。
对于模板,您必须使用模板类型的FindName()方法。
因此,假设“this”表示您已应用样式的窗口,您可以访问该按钮的方式是(Button)this.Template.FindName(“btn”,this)
如果这回答了你的问题,请告诉我......