简单的UWP按钮动画

时间:2017-08-25 16:29:31

标签: c# xaml animation uwp uwp-xaml

为了测试UWP,我做了一个非常简单的小样本应用程序,它只使用基类来创建一个漂亮且可扩展的UI。我遇到的最近一个问题是使按钮生动。在WPF中,这是一个微不足道的过程;然而,在UWP中,我在使用Storyboard的可附加属性时几乎立即遇到了障碍。我尝试了以下代码的许多变体,但是他们都说动画值对于对象无效,或者它无法评估值。 The TypeConverter for "DependencyObject" does not support converting from a string.以下示例错误我做错了什么?我知道它与Storyboard.Target有关,但如果我将值设置为{Binding ElementName=Start}之类的其他内容,则会抛出另一个错误,说No installed components were detected. Cannot resolve TargetProperty Background on specified object.

<Button Grid.Row="2" Name="Start" HorizontalAlignment="Center" Content="START" FontFamily="Nexa Bold" FontSize="10" BorderThickness="0" Foreground="AntiqueWhite" FontWeight="Black">
<Button.Triggers>
    <EventTrigger RoutedEvent="Button.Click">
        <EventTrigger.Actions>
            <BeginStoryboard>
                <Storyboard AutoReverse="True" Duration="0:0:0:1.000">
                    <ObjectAnimationUsingKeyFrames Storyboard.Target="Start" Storyboard.TargetProperty="Background">

                    </ObjectAnimationUsingKeyFrames>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger.Actions>
    </EventTrigger>
</Button.Triggers>

所有帮助表示赞赏。谢谢!

2 个答案:

答案 0 :(得分:2)

在UWP中没有内置的Trigger支持,但在Behavior的帮助下,这也可以优雅地完成。

首先,我们需要从Nuget安装 Behavior SDK

  

安装包Microsoft.Xaml.Behaviors.Uwp.Managed -Version 2.0.0

然后,在XAML页面中包含以下命名空间。

xmlns:Interactivity="using:Microsoft.Xaml.Interactivity"
xmlns:Core="using:Microsoft.Xaml.Interactions.Core"

接下来,在页面的Storyboard部分定义您的Resource

<Page.Resources>
    <Storyboard x:Name="BackgroundColorStoryboard"
                AutoReverse="True">
        <ColorAnimation Duration="0:0:1"
                        To="Red"
                        Storyboard.TargetProperty="(Control.Background).(SolidColorBrush.Color)"
                        Storyboard.TargetName="Start"
                        d:IsOptimized="True" />
    </Storyboard>
</Page.Resources>

最后,我们要选择一个名为ControlStoryboardAction的行为,该行为来自SDK并将其附加到您的Button。请注意,此ControlStoryboardAction包含在EventTriggerBehaviorEventName设置为Click。这意味着,每当调用附加元素的Click事件(即您的Button)时,Storyboard的{​​{1}}将被启动。这类似于ControlStoryboardAction在WPF中所做的事情。

Trigger

此SDK中包含许多其他有用的行为。您可以从here查看全部内容。希望这有帮助!

答案 1 :(得分:1)

既然您已经有了一个故事板,那么只需在按钮的Click处理程序中播放它?

MyStoryboard.Begin();