C# 如何使用故事板在网格上应用RenderTransform.TranslateTransform?
在我的应用程序资源中,我定义了以下C# 如何使用故事板在网格上应用RenderTransform.TranslateTransform?,c#,wpf,animation,C#,Wpf,Animation,在我的应用程序资源中,我定义了以下情节提要: App.xaml <Storyboard x:Key="DefaultSB" Name="DefaultSB" x:Shared="false"> <DoubleAnimation Duration="0:0:1" From="100" To="-100" Storyboard.TargetProperty="RenderTransform.(TranslateTransform.Y)" /> <Doub
情节提要
:
App.xaml
<Storyboard x:Key="DefaultSB" Name="DefaultSB" x:Shared="false">
<DoubleAnimation Duration="0:0:1" From="100" To="-100" Storyboard.TargetProperty="RenderTransform.(TranslateTransform.Y)" />
<DoubleAnimation Duration="0:0:0.2" From="0" To="1" Storyboard.TargetProperty="Opacity" />
</Storyboard>
现在,Opacity
发生了更改,但没有应用渲染转换。我还尝试了(UIElement.RenderTransform).TranslateTransform.Y
,但也没有成功
如何设置TranslateTransform的动画?对于我来说,这个示例很有效。请注意
Grid.RenderTransform
:
XAML
<Window.Resources>
<Storyboard x:Key="TestStoryboard">
<DoubleAnimation Storyboard.TargetProperty="RenderTransform.(TranslateTransform.X)"
To="0"/>
<DoubleAnimation Storyboard.TargetProperty="Opacity"
From="0"
To="1" />
</Storyboard>
</Window.Resources>
<Grid Name="MyGrid"
Background="AliceBlue">
<Grid.RenderTransform>
<TranslateTransform X="50" Y="0" />
</Grid.RenderTransform>
<Button VerticalAlignment="Top"
HorizontalAlignment="Left"
Margin="10"
Content="Click"
Click="Button_Click" />
</Grid>
有关更多信息,请参阅:
编辑
您还可以在代码隐藏中创建TranslateTransform
并设置RenderTransform
,如下所示:
private void Button_Click(object sender, RoutedEventArgs e)
{
Storyboard myStoryboard = (Storyboard)this.Resources["TestStoryboard"];
TranslateTransform myTranslate = new TranslateTransform();
myTranslate.X = 50;
myTranslate.Y = 0;
MyGrid.RenderTransform = myTranslate;
Storyboard.SetTarget(myStoryboard.Children.ElementAt(0) as DoubleAnimation, MyGrid);
Storyboard.SetTarget(myStoryboard.Children.ElementAt(1) as DoubleAnimation, MyGrid);
myStoryboard.Begin();
}
因此,结论是故事板只能对在XAML中显式设置的属性设置动画?另外,需要注意的是,如果您使用设计器显式设置属性,那么您将获得一个额外的“TransformGroup”元素作为“TranslateTransform”元素的父元素。这就是我的问题所在!这回答了你的问题吗?
private void Button_Click(object sender, RoutedEventArgs e)
{
Storyboard myStoryboard = (Storyboard)this.Resources["TestStoryboard"];
Storyboard.SetTarget(myStoryboard.Children.ElementAt(0) as DoubleAnimation, MyGrid);
Storyboard.SetTarget(myStoryboard.Children.ElementAt(1) as DoubleAnimation, MyGrid);
myStoryboard.Begin();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Storyboard myStoryboard = (Storyboard)this.Resources["TestStoryboard"];
TranslateTransform myTranslate = new TranslateTransform();
myTranslate.X = 50;
myTranslate.Y = 0;
MyGrid.RenderTransform = myTranslate;
Storyboard.SetTarget(myStoryboard.Children.ElementAt(0) as DoubleAnimation, MyGrid);
Storyboard.SetTarget(myStoryboard.Children.ElementAt(1) as DoubleAnimation, MyGrid);
myStoryboard.Begin();
}