【问题标题】:In WPF animation set property BeginTime to a static resource在 WPF 动画中将属性 BeginTime 设置为静态资源
【发布时间】:2011-12-10 11:24:32
【问题描述】:

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

例如,我想要:

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

...

<DoubleAnimation BeginTime={StaticResource SomeResource}/>

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

我也想纯粹在 XAML 中执行此操作。

谢谢。

【问题讨论】:

    标签: wpf xaml animation resources


    【解决方案1】:

    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 时一定做了一些愚蠢的事情。
    • 请注意,这在 Silverlight 中不起作用,显然...给出了本机异常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 2010-10-25
    • 2020-12-21
    • 2016-08-18
    • 1970-01-01
    相关资源
    最近更新 更多