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

3
我希望做的是,使用资源定义动画中所有的BeginTimes。
例如,我想要:
<sys:TimeSpan x:key="SomeResource">... </sys:TimeSpan>

...

<DoubleAnimation BeginTime={StaticResource SomeResource}/>

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

我也想纯粹使用XAML完成这个操作。

谢谢。

1个回答

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"

希望这能帮到你!

System.TimeSpan确实可行。非常感谢您的答案。我曾经尝试过TimeSpan,但一定是做了什么傻事。我一直在苦苦寻找正确的类型使用。 - George
2
请注意,这在Silverlight中不起作用,显然会引发本机异常。 - McGarnagle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接