如何在View中实现Storyboard的复用

在使用微软的WPF技术来编写前端时,我们经常会使用故事板来让控件变化的时候更流畅。如果需要对一个故事板进行复用,我们除了可以使用代码来实现一个故事板复用以外,也可以使用ControlTemplate来实现故事板效果的复用。

比如下边的例子中,是一个只针对thisButton的按钮控件来修改透明度的故事板。

<Storyboard x:Key="thisButtonCollapsed">
    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="thisButton">
        <EasingDoubleKeyFrame KeyTime="0" Value="1"/>
        <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="0"/>
    </DoubleAnimationUsingKeyFrames>
</Storyboard>
<Button Name="thisButton" >
                <EventTrigger RoutedEvent="Button.Click">
                    <BeginStoryboard Storyboard="{StaticResource thisButtonCollapsed}" />
                </EventTrigger>
            </Button>

当我们另写一个button的时候,我们只能重新写一个与这个很相似的故事板。但如果我们提前自定义一个ControlTemplate,并且将该故事板放进去,就能实现复用了,比如我们先定义一个ControlTemplate。

<ControlTemplate x:Key="buttonOpacityStyle" TargetType="Button">
    <ControlTemplate.Resources>
        <Storyboard x:Key ="borderCollapsed">
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="Border">
                <EasingDoubleKeyFrame KeyTime="0" Value="1"/>
                <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="0"/>
            </DoubleAnimationUsingKeyFrames>
        </Storyboard>
    </ControlTemplate.Resources>
    <Border Name="Border">
        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"
                          Margin="{TemplateBinding Padding}"></ContentPresenter>
    </Border>
    <ControlTemplate.Triggers>
        <EventTrigger RoutedEvent="Click">
            <BeginStoryboard Storyboard="{StaticResource borderCollapsed}"></BeginStoryboard>
        </EventTrigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

然后,令按键按钮的Template等于该ControlTemplate,就可以实现该故事板动画的复用。

<Button Template="{StaticResource buttonOpacityStyle}" Content="多多交流"/>
<Button Template="{StaticResource buttonOpacityStyle}" Content="共同进步"/>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值