动画用户控件
Animating UserControl
我在我的两个 UserControls
上使用 Blend 制作了一个不透明动画,从中删除了 <UserControl.Resources>
、<UserControl.Triggers>
和 Storyboard.TargetName
,将其放在 App.xaml
看起来像:
<Storyboard x:Key="Loaded">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" >
<EasingDoubleKeyFrame KeyTime="0" Value="0"/>
<EasingDoubleKeyFrame KeyTime="0:0:3" Value="1"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
当我在设置 ContentControl
的 Content
之前用这样的代码调用它时:
Storyboard sb = FindResource("Loaded") as Storyboard;
sb.begin(uc1);
content.Content = uc1;
//and
Storyboard sb = FindResource("Loaded") as Storyboard;
sb.begin(uc2);
content.Content = uc2;
它按预期工作。对于变换动画,除了上面的那些之外,我还删除了 TransformGroup
,现在它看起来像:
<Storyboard x:Key="Unloaded">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)">
<EasingDoubleKeyFrame KeyTime="0" Value="0"/>
<EasingDoubleKeyFrame KeyTime="0:0:3" Value="-800"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
如果我以同样的方式调用它,我会得到这个错误:
System.InvalidOperationException: ''[Unknown]' property does not point to a DependencyObject in path '(0).(1)[3].(2)'.'
如何解决问题?
您将需要向您的 UserControl 添加一个 RenderTransform,它类似于 Storyboard.TargetProperty 目前需要一个 TransformGroup,其中第 4 个 child 作为 TranslateTransform。
将以下代码添加到您的两个用户控件中:
<UserControl x:Class="YourUserControl"
...>
<UserControl.RenderTransform>
<TransformGroup>
<RotateTransform/>
<ScaleTransform/>
<SkewTransform/>
<TranslateTransform/>
</TransformGroup>
</UserControl.RenderTransform>
我在我的两个 UserControls
上使用 Blend 制作了一个不透明动画,从中删除了 <UserControl.Resources>
、<UserControl.Triggers>
和 Storyboard.TargetName
,将其放在 App.xaml
看起来像:
<Storyboard x:Key="Loaded">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" >
<EasingDoubleKeyFrame KeyTime="0" Value="0"/>
<EasingDoubleKeyFrame KeyTime="0:0:3" Value="1"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
当我在设置 ContentControl
的 Content
之前用这样的代码调用它时:
Storyboard sb = FindResource("Loaded") as Storyboard;
sb.begin(uc1);
content.Content = uc1;
//and
Storyboard sb = FindResource("Loaded") as Storyboard;
sb.begin(uc2);
content.Content = uc2;
它按预期工作。对于变换动画,除了上面的那些之外,我还删除了 TransformGroup
,现在它看起来像:
<Storyboard x:Key="Unloaded">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)">
<EasingDoubleKeyFrame KeyTime="0" Value="0"/>
<EasingDoubleKeyFrame KeyTime="0:0:3" Value="-800"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
如果我以同样的方式调用它,我会得到这个错误:
System.InvalidOperationException: ''[Unknown]' property does not point to a DependencyObject in path '(0).(1)[3].(2)'.'
如何解决问题?
您将需要向您的 UserControl 添加一个 RenderTransform,它类似于 Storyboard.TargetProperty 目前需要一个 TransformGroup,其中第 4 个 child 作为 TranslateTransform。
将以下代码添加到您的两个用户控件中:
<UserControl x:Class="YourUserControl"
...>
<UserControl.RenderTransform>
<TransformGroup>
<RotateTransform/>
<ScaleTransform/>
<SkewTransform/>
<TranslateTransform/>
</TransformGroup>
</UserControl.RenderTransform>