Стиль градиента WPF ControlTemplate в триггере - PullRequest
1 голос
/ 05 июня 2009

Вот мой XAML для TabItem. Я хочу иметь возможность установить цвет одиночной градиентной остановки в триггере. Я знаю, что могу полностью переопределить градиент в установщике триггера, но я хочу получить доступ к определенному свойству на фоне, чтобы я мог его анимировать в будущем.

Я перепробовал все варианты в установщике триггера и долго гуглил - но все равно не могу заставить его скомпилировать. Я также попробовал синтаксис class.property, но все еще ничего. Текущая ошибка, которую вызывает этот код:

"Тип 'Background.GradientStops [0]' не найден."

Я почти уверен, что знаю, что здесь происходит, и, возможно, то, что я хочу, невозможно. Но должен быть способ анимировать градиент элемента управления в шаблоне элемента управления ...

Кто-нибудь может мне помочь? спасибо

<Style TargetType="{x:Type TabItem}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TabItem}">
                <TextBlock Padding="6 2 6 2" Name="TheHeader">
                    <TextBlock.Background>
                        <LinearGradientBrush StartPoint="0, 0" EndPoint="0, 1">
                            <GradientStop Offset="0" Color="#f4fafd" />
                            <GradientStop Offset="1" Color="#ceedfa" />
                        </LinearGradientBrush>
                    </TextBlock.Background>
                    <ContentPresenter ContentSource="Header" Margin="0" />
                </TextBlock>
                <ControlTemplate.Triggers >
                    <Trigger Property="IsSelected" Value="True">
                        <Setter TargetName="TheHeader" Property="Background.GradientStops[0].Color" Value="White" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

1 Ответ

1 голос
/ 05 июня 2009

Вы можете анимировать это, как в примере здесь .

Вы также можете использовать небольшой хак для его установки, хотя я всегда предпочитаю создавать несколько кистей в качестве ресурсов и заменять их или заново создавать кисть в том, что вы упомянули.

<Style TargetType="{x:Type TabItem}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TabItem}">
                    <TextBlock Padding="6 2 6 2"
                               Name="TheHeader" Tag="#f4fafd">
                                    <TextBlock.Background>
                                            <LinearGradientBrush StartPoint="0, 0"
                                                                 EndPoint="0, 1">
                                                    <GradientStop Offset="0" 
                                                                  Color="{Binding ElementName=TheHeader, Path=Tag}"/>
                                                    <GradientStop Offset="1"
                                                                  Color="#ceedfa" />
                                            </LinearGradientBrush>
                                    </TextBlock.Background>
                                    <ContentPresenter ContentSource="Header"
                                                      Margin="0" />
                    </TextBlock>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsSelected"
                                 Value="True">
                            <Setter TargetName="TheHeader"
                                    Property="Tag"
                                    Value="Red" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...