WPF: проблема с применением стиля к пользовательскому заголовку TabItem через ControlTemplate и ContentPresenter.Resources - PullRequest
0 голосов
/ 01 июня 2011

Я пытаюсь написать свой собственный шаблон элемента управления для заголовка 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>

1 Ответ

1 голос
/ 01 июня 2011

Переместите свой стиль на один уровень upper.ie, переместите его в ControlTemplate.Resources, и он будет работать нормально. Я не совсем уверен, почему код в вопросе не работает. Это может быть потому, что элементы управления в contentpresenter уже построено к тому времени, когда стиль встречается.

<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>
...