c# - 如何使用 Storyboard 在 Grid 上应用 RenderTransform.TranslateTransform?

标签 c# wpf animation

在我的应用程序资源中,我定义了以下 Storyboard:

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>

在我后面的代码中,我将 Storyboard 应用于网格控件:

Storyboard myStoryboard = (Storyboard)App.Current.Resources["DefaultSB"];
Storyboard.SetTarget(myStoryboard.Children.ElementAt(0) as DoubleAnimation, Editor);
Storyboard.SetTarget(myStoryboard.Children.ElementAt(1) as DoubleAnimation, Editor);
myStoryboard.Begin();

现在 Opacity 发生了变化,但是没有应用 RenderTransform。我还尝试了 (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>

代码隐藏

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();            
} 

更多信息请看:

MSDN: Transforms Overview

编辑

您还可以创建 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();            
} 

关于c# - 如何使用 Storyboard 在 Grid 上应用 RenderTransform.TranslateTransform?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22630569/

相关文章:

C# 正则表达式匹配 TEXT 中的关键字并在匹配周围获取几个单词

c# - 在 using 语句中声明 2 种类型会导致编译错误?

wpf - 当应用程序类型为类库时,未定义的CLR namespace

javascript - CSS 动画事件不继续?

c++ - OpenGL - 这是在舞台上绘制旋转环的正确方法吗?

javascript - 使用 JavaScript 事件再次触发 CSS 动画

c# - 在多个项目中使用相同的数据库

c# - 在本地调试 C# AWS Lambda 函数

wpf - WPF 和 Windows 窗体应用程序的显示差异

c# - UserControl 属性绑定(bind)不更新 DataContext