0

TabItemヘッダー用に独自のコントロールテンプレートを作成しようとしていますが、基本的なレイアウトが機能するようになりましたが、テキストブロックのサイズやフォントを操作するなど、ヘッダーのコンテンツにスタイルを適用したいと思います。

これをテストするために、tabitemヘッダーに楕円を配置し、スタイリングを通じてその楕円をゴールドブラシで塗りつぶそうとしています。ただし、動作していません。楕円が存在し、コントロールテンプレートが適用されていますが、楕円の塗りつぶしはゴールドではありません。ContentPresenter.Resources内のスタイルは無視されています(そしてResharperはそれを証明するためにそれをグレー表示しています)。私が間違っていることについて何か考えはありますか?ありがとう。

コードは次のとおりです。

    <TabItem>
    <TabItem.Template>
        <ControlTemplate x:Name="theTabItemControlTemplate" TargetType="{x:Type TabItem}">
            <Border BorderBrush="DarkBlue" BorderThickness="10">
                <Grid>
                    <ContentPresenter ContentSource="Header" RecognizesAccessKey="True">
                        <ContentPresenter.Resources>
                            <Style TargetType="{x:Type Ellipse}">
                                <Setter Property="Ellipse.Fill" Value="Gold"/>
                            </Style>
                        </ContentPresenter.Resources>
                    </ContentPresenter>
                </Grid>
            </Border>
        </ControlTemplate>
    </TabItem.Template>
    <TabItem.Header>
        <Ellipse Stroke="Black" StrokeThickness="2" Width="100" Height="30" Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
    </TabItem.Header>
</TabItem>
4

1 に答える 1

1

スタイルを1レベル上に移動します。つまり、ControlTemplate.Resourcesに移動すると、正常に機能します。質問のコードが機能しない理由はよくわかりません。コンテンツプレゼンターのコントロールが既に作成されていることが原因である可能性があります。スタイルに遭遇したとき。

<ControlTemplate x:Name="theTabItemControlTemplate" TargetType="{x:Type TabItem}">
            <ControlTemplate.Resources>
                <Style TargetType="{x:Type Ellipse}">
                    <Setter Property="Fill" Value="Red"/>
                </Style>
            </ControlTemplate.Resources>
            <Border BorderBrush="DarkBlue" BorderThickness="10">
        <Grid>
            <ContentPresenter ContentSource="Header" RecognizesAccessKey="True">

            </ContentPresenter>
        </Grid>
    </Border>
</ControlTemplate>
于 2011-06-01T10:57:22.727 に答える