在WPF动画中将属性BeginTime设置为静态资源

时间:2011-10-18 21:39:08

标签: wpf xaml animation resources

我想要做的是使用资源定义我的动画的所有BeginTimes。

例如,我想:

<sys:TimeSpan x:key="SomeResource">... </sys:TimeSpan>

...

<DoubleAnimation BeginTime={StaticResource SomeResource}/>

显然sys:TimeSpan不是正确的类型。如何定义我的资源,以便在定义动画时将其作为资源引用?

我也想纯粹在XAML中这样做。

感谢。

1 个答案:

答案 0 :(得分:3)

System.TimeSpan是正确使用的类型,因为这是BeginTime的类型。您也可以对Duration执行相同操作(但改为使用System.Windows.Duration类型)。

以下是在动画中使用StaticResource的示例(2秒后,淡入1秒):

    <Button Content="Placeholder"
            HorizontalAlignment="Center"
            VerticalAlignment="Center"
            Opacity="0.5">
        <Button.Resources>
            <sys:TimeSpan x:Key="FadeInBeginTime">0:0:2</sys:TimeSpan>
            <Duration x:Key="FadeInDuration">0:0:1</Duration>
        </Button.Resources>
        <Button.Style>
            <Style>
                <Style.Triggers>
                    <EventTrigger RoutedEvent="UIElement.MouseEnter">
                        <BeginStoryboard x:Name="FadeInBeginStoryBoard">
                            <Storyboard>
                                <DoubleAnimation Storyboard.TargetProperty="Opacity"
                                                 To="1"
                                                 BeginTime="{StaticResource FadeInBeginTime}"
                                                 Duration="{StaticResource FadeInDuration}" />
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger>
                    <EventTrigger RoutedEvent="UIElement.MouseLeave">
                        <StopStoryboard BeginStoryboardName="FadeInBeginStoryBoard" />
                    </EventTrigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
    </Button>

假设您已将sys命名空间声明为:

    xmlns:sys="clr-namespace:System;assembly=mscorlib"

希望这有帮助!