简体   繁体   English

TabItem IsSelected 时如何触发 ColorAnimation?

[英]How to trigger a ColorAnimation when TabItem IsSelected?

The following code triggers a ColorAnimation when window is loaded.以下代码在加载窗口时触发ColorAnimation

How can I trigger a ColorAnimation when TabItem.IsSelected gets true instead?TabItem.IsSelected true时,如何触发ColorAnimation

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <Style TargetType="{x:Type TabItem}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type TabItem}">
                        <Grid SnapsToDevicePixels="True">
                            <Border x:Name="Bd" Margin="0,0,3,0" BorderThickness="3" BorderBrush="{TemplateBinding BorderBrush}">
                                <Border.Background>
                                    <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
                                        <GradientStop x:Name="myGradientStop" Offset="0.0" Color="Yellow"/>
                                    </LinearGradientBrush>
                                </Border.Background>
                                <Border.Triggers>
                                    <EventTrigger RoutedEvent="Window.Loaded">
                                        <BeginStoryboard>
                                            <Storyboard RepeatBehavior="Forever">
                                                <ColorAnimation Storyboard.TargetName="myGradientStop" Storyboard.TargetProperty="Color" From="Pink" To="Lavender" Duration="0:0:1"/>
                                            </Storyboard>
                                        </BeginStoryboard>
                                    </EventTrigger>
                                </Border.Triggers>
                                <ContentPresenter x:Name="Content" ContentSource="Header" RecognizesAccessKey="True"/>
                            </Border>
                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsSelected" Value="True">
                                <Setter Property="BorderBrush" TargetName="Bd" Value="Black"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Window.Resources>

    <Grid>
        <TabControl>
            <TabItem Header="TabItem1">
                <Label Content="TabItem1 content goes here..." />
            </TabItem>
            <TabItem Header="TabItem2">
                <Label Content="TabItem2 content goes here..." />
            </TabItem>
            <TabItem Header="TabItem3">
                <Label Content="TabItem3 content goes here..." />
            </TabItem>
        </TabControl>
    </Grid>
</Window>

Thanks in advance.提前致谢。

You should change your EventTrigger to a Trigger on the TabItem.IsSelected property and move it in the ControlTemplate.Triggers collection that you already have.您应该将EventTrigger更改为TabItem.IsSelected属性上的Trigger ,并将其移动到您已有的ControlTemplate.Triggers集合中。

Your ControlTemplate would become:您的ControlTemplate将变为:

<ControlTemplate TargetType="{x:Type TabItem}">
    <Grid SnapsToDevicePixels="True">
        <Border x:Name="Bd" Margin="0,0,3,0" BorderThickness="3" BorderBrush="{TemplateBinding BorderBrush}">
            <Border.Background>
                <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
                    <GradientStop x:Name="myGradientStop" Offset="0.0" Color="Yellow"/>
                </LinearGradientBrush>
            </Border.Background>
            <ContentPresenter x:Name="Content" ContentSource="Header" RecognizesAccessKey="True"/>
        </Border>
    </Grid>
    <ControlTemplate.Triggers>
        <Trigger Property="IsSelected" Value="True">
            <Setter Property="BorderBrush" TargetName="Bd" Value="Black"/>
            <Trigger.EnterActions>
                <BeginStoryboard x:Name="beginStoryboard">
                    <Storyboard RepeatBehavior="Forever">
                        <ColorAnimation Storyboard.TargetName="myGradientStop"
                                        Storyboard.TargetProperty="Color"
                                        From="Pink"
                                        To="Lavender"
                                        Duration="0:0:1"/>
                    </Storyboard>
                </BeginStoryboard>
            </Trigger.EnterActions>
            <Trigger.ExitActions>
                <RemoveStoryboard BeginStoryboardName="beginStoryboard"/>
            </Trigger.ExitActions>
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

I assumed you wanted to stop the animation when the TabItem gets unselected so I added a RemoveStoryboard exit action in the Trigger .我假设你想在TabItem被取消选择时停止动画,所以我在Trigger添加了一个RemoveStoryboard退出操作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM