gpt4 book ai didi

wpf - 在 WPF 中使用 ObjectAnimationUsingKeyFrames 对 Control 的 'Style' 属性进行动画处理

转载 作者:行者123 更新时间:2023-12-04 16:01:55 29 4
gpt4 key购买 nike

我正在尝试使用 ObjectAnimationUsingKeyFrames 为“样式”属性设置动画。当我运行下面的示例时,我只看到空窗口并且没有任何异常。

几乎相同的示例适用于 Silverlight。在 WPF 中它也可以工作,如果我直接分配控件的“样式”属性。有谁知道是否可以在 WPF 中为“样式”属性设置动画?

非常感谢。

<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:this="clr-namespace:WpfApplication1"
Title="MainWindow" Height="350" Width="525"
>
<Window.Resources>
<ResourceDictionary>

<Style x:Key="TestStyle" TargetType="Control">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Canvas x:Name="Rectangle">
<Rectangle Width="200" Height="150" Fill="Red"/>
</Canvas>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
</Window.Resources>
<Canvas>
<Canvas.Triggers>
<EventTrigger RoutedEvent="Canvas.Loaded">
<BeginStoryboard>
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="Target" Storyboard.TargetProperty="Style" >
<DiscreteObjectKeyFrame KeyTime="0:0:0.0" Value="{StaticResource ResourceKey=TestStyle}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Canvas.Triggers>

<Canvas.Children>
<ContentControl x:Name="Target"/>
</Canvas.Children>
</Canvas>

最佳答案

ObjectAnimationUsingKeyFrames尝试为派生自 DependencyObject 的值设置动画,它试图 freeze先说对象。如果对象不能被卡住,它会抛出异常并且动画不会运行。

如果您正在为您编写的自定义类型的值设置动画,您似乎需要从 Freezable 派生。或不是源自 DependencyObject .

对于从 DependencyObject 派生的已经存在的属性而不是 Freezable ,您不能为它们设置动画( StylePropertyTemplateProperty 就是恰当的例子)。尝试在样式中使用属性 setter :

<Style.Triggers>
<Trigger Property="IsEnabled" Value="True">
<Setter Property="Template" Value="{StaticResource TestTemplate}"/>
</Trigger>
</Style.Triggers>

将所有过渡逻辑构建到样式中,而不是在不同样式之间切换。您可能遇到的一个挑战是目标属性必须是依赖属性,因此您不能使用 IsLoaded .

希望这个对你有帮助。

最后一个想法:可以定义 custom animations ,虽然我自己没有这样做过。有一个外部机会,您可以编写自己的自定义“ObjectAnimation”,而不限于 Freezable或非 DependencyObject类。

关于wpf - 在 WPF 中使用 ObjectAnimationUsingKeyFrames 对 Control 的 'Style' 属性进行动画处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4888181/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com