为了测试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>
所有帮助表示赞赏。谢谢!
答案 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
包含在EventTriggerBehavior
中EventName
设置为Click
。这意味着,每当调用附加元素的Click
事件(即您的Button
)时,Storyboard
的{{1}}将被启动。这类似于ControlStoryboardAction
在WPF中所做的事情。
Trigger
此SDK中包含许多其他有用的行为。您可以从here查看全部内容。希望这有帮助!
答案 1 :(得分:1)
既然您已经有了一个故事板,那么只需在按钮的Click处理程序中播放它?
MyStoryboard.Begin();