Триггер стиля WPF с именем цели не работает должным образом - PullRequest
0 голосов
/ 06 октября 2018

У меня проблема с настройкой цвета переднего плана в шаблоне ControlTemplate с помощью триггеров.

            <LinearGradientBrush x:Key="TabItemDefaultBackgroundBrush" StartPoint="0,0" EndPoint="0,1">
                <GradientBrush.GradientStops>
                    <GradientStopCollection>
                        <GradientStop Offset="0.0" Color="#FFF" />
                        <GradientStop Offset="1.0" Color="#EEE" />
                    </GradientStopCollection>
                </GradientBrush.GradientStops>
            </LinearGradientBrush>

            <SolidColorBrush x:Key="SolidBorderBrush" Color="#888" />
            <SolidColorBrush x:Key="TabItemSelectBackgroundBrush" Color="#69C" />
            <SolidColorBrush x:Key="PressedBrush" Color="#79C" />
            <Style TargetType="{x:Type TabItem}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type TabItem}">
                            <Grid>
                                <Border
                                    Name="tabBorder"
                                    MinWidth="150"
                                    MinHeight="50"
                                    Margin="0,0,20,0"
                                    Background="{StaticResource TabItemDefaultBackgroundBrush}"
                                    BorderBrush="{StaticResource SolidBorderBrush}"
                                    BorderThickness="1"
                                    CornerRadius="1,1,1,1">
                                    <Grid>
                                        <Grid >
                                            <TextBlock Name="HeaderHeader">
                                                </TextBlock>
                                        </Grid>
                                        <ContentPresenter
                                            x:Name="ContentSite"
                                            Margin="12,2,12,2"
                                            HorizontalAlignment="Center"
                                            VerticalAlignment="Center"
                                            ContentSource="Header"
                                            RecognizesAccessKey="True" />
                                    </Grid>
                                </Border>
                            </Grid>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsSelected" Value="True">
                                    <Setter TargetName="HeaderHeader" Property="Foreground" Value="White" />
                                    <Setter TargetName="tabBorder" Property="Background" Value="{StaticResource TabItemSelectBackgroundBrush}" />
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>

Когда выбрана вкладка, граница фона 'tabBorder' установлена ​​правильно, но передний план текстового блока 'HeaderHeader'не отвечает.

<ControlTemplate.Triggers>
    <Trigger Property="IsSelected" Value="True">
        <Setter TargetName="HeaderHeader" Property="Foreground" Value="White" />
        <Setter TargetName="tabBorder" Property="Background" Value="{StaticResource TabItemSelectBackgroundBrush}" />
    </Trigger>
</ControlTemplate.Triggers>

Когда я удаляю TargetName и устанавливаю белый цвет переднего плана (для всех компонентов), он работает.(но, очевидно, также цвет переднего плана всего содержимого pre

<ControlTemplate.Triggers>
    <Trigger Property="IsSelected" Value="True">
        <Setter Property="Foreground" Value="White" />
        <Setter TargetName="tabBorder" Property="Background" Value="{StaticResource TabItemSelectBackgroundBrush}" />
    </Trigger>
</ControlTemplate.Triggers>

Даже более странно, когда я помещаю TargetName обратно на место, но меняю свойство сеттера с переднего плана на фон, это работает!Затем для выбранной вкладки фон устанавливается белым.

<ControlTemplate.Triggers>
    <Trigger Property="IsSelected" Value="True">
        <Setter TargetName="HeaderHeader" Property="Background" Value="White" />
        <Setter TargetName="tabBorder" Property="Background" Value="{StaticResource TabItemSelectBackgroundBrush}" />
    </Trigger>
</ControlTemplate.Triggers>

Почему он не работает для того, что мне нужно (= установить передний план для выбранной вкладки)?!

1 Ответ

0 голосов
/ 06 октября 2018

Ага, я кое-что узнал сегодня ... Я смотрел не в ту сторону!После того, как что-то погуглило над «ControlTemplate», что-то окончательно утонуло. ContentPresenter не показывает информацию вкладки, оно показывает метку вкладки и ничего более.Так что мой триггер работал просто отлично, но он устанавливал передний план текстового блока, который не имел никакого значения!

Когда я меняю триггер, на котором элемент управления фактически показывает метку, это было легко, peasy ...

<Setter TargetName="ContentSite" Property="TextElement.Foreground" Value="White" />

Мне пришлось использовать присоединенное свойство 'TextElement', чтобывозможность устанавливать свойства текстовых элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...