访问ControlTemplate中的控件?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (26)

这是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>

我想要访问名为TextBlock的textBlock2

我试过推翻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为NULL(从MSDN获取的示例)。

当然,ct#都是空的。

我在这儿漏了什么?

提问于
用户回答回答于

你的代码是正确的,但可能用在了不合适的地方,FindName只有在应用模板之后才能工作。通常,当你覆盖时使用它。OnApplyTemplate在自定义控件中。由于你没有创建自定义控件,所以可以在按钮的加载事件中执行该操作。

用户回答回答于

如果已覆盖OnApplyTemplate,则不要使用FindResource()或Template.FindName()或VisualTreeHelper。就用this.GetTemplateChild("textBlock2");

WPF中的模板有一个独立的显像管。这是因为模板被重用,当每个控件的多个实例实例化其模板时,模板中定义的任何名称都不能保持唯一。调用GetTemplatchild方法,以返回对模板实例化后来自该模板的对象的引用。无法使用FrameworkElement.FindName方法从模板中查找项,因为FrameworkElement.FindName的作用范围更广,而且一旦应用ControlTemplate类本身和实例化模板之间就没有连接。

查看此链接

http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.gettemplatechild.aspx

如果你的例子是微软的例子,那么我建议你再读一遍。你可能漏掉了什么。

http://msdn.microsoft.com/en-us/library/bb613586.aspx

所属标签

可能回答问题的人

  • 不吃貓的鱼oo

    5 粉丝466 提问6 回答
  • Richel

    8 粉丝0 提问4 回答
  • 发条丶魔灵1

    6 粉丝525 提问3 回答
  • 人生的旅途

    10 粉丝484 提问3 回答

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励