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たが、null になりました。

私はもう試した:

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# はすべて null です。

ここで何が欠けていますか?

4

7 に答える 7

7

あなたのコードは正しいですが、おそらく適切な場所ではありません...FindNameテンプレートが適用された後にのみ機能します。OnApplyTemplate通常、カスタム コントロールでオーバーライドするときに使用します。カスタム コントロールを作成していないため、ボタンの Loaded イベントで作成できます。

于 2013-10-19T00:44:14.713 に答える