这是 xaml:
<Page.Resources>
<ControlTemplate x:Key="WeddingButtonBigTemplate" TargetType="Button">
<Grid>
<Image x:Name="imgNormal" Source="../Images/Married_button2.png"/>
<TextBlock x:Name="textBlock2" Style="{StaticResource RegularBlueSpecialBoldText}" LineHeight="28" LineStackingStrategy="BlockLineHeight" HorizontalAlignment="Center" Margin="10,30,10,70" TextWrapping="Wrap" TextAlignment="Center" VerticalAlignment="Stretch" >
<Run FontSize="20" Text="The event of"></Run>
<Run FontSize="28" Text="{DynamicResource strBride}"></Run>
</TextBlock>
</Grid>
</ControlTemplate>
</Page.Resources>
<Grid HorizontalAlignment="Center" VerticalAlignment="Top" Width="1000">
<Button x:Name="btnWedding" HorizontalAlignment="Left" Margin="10,20,0,-49" VerticalAlignment="Top" Template="{StaticResource WeddingButtonBigTemplate}" Foreground="#FF2B4072" Width="380" Click="btnClick" />
</Grid>
我正在尝试访问名为的 TextBlocktextBlock2
.
我尝试过覆盖OnApplyTemplate
但得到了空。
我试过了:
Grid gridInTemplate = (Grid)btnWedding.Template.FindName("grid", btnWedding);
var ct0 = btnWedding.Template.FindName("textBlock2", btnWedding);
var ct1 = btnWedding.FindName("textBlock2");
var ct2 = btnWedding.FindResource("textBlock2");
gridInTemplate 为空(示例取自 MSDN)。
当然,ct# 都是空的。
我在这里缺少什么?
如果您已重写 OnApplyTemplate,则不要使用 FindResource() 或 Template.FindName() 或任何 VisualTreeHelper 的 hack。只需使用this.GetTemplateChild("textBlock2");
WPF 中的模板具有独立的名称范围。这是因为模板是重复使用的,并且当控件的多个实例各自实例化其模板时,模板中定义的任何名称都不能保持唯一。实例化模板后,调用 GetTemplateChild 方法返回对来自模板的对象的引用。您无法使用 FrameworkElement.FindName 方法从模板中查找项目,因为 FrameworkElement.FindName 作用于更一般的范围,并且 ControlTemplate 类本身与应用后的实例化模板之间没有任何连接。
查看此链接:
http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.gettemplatechild.aspx http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.gettemplatechild.aspx
如果你的例子是微软的例子那么我建议你再读一遍。您可能跳过了某些内容。
http://msdn.microsoft.com/en-us/library/bb613586.aspx http://msdn.microsoft.com/en-us/library/bb613586.aspx
总结 - 在创作自定义控件时使用 GetTemplateChild() OnApplyTemplate,其他情况下使用Template.FindName。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)