繁体   English   中英

如何解决 XAML C# 中的动画问题?

[英]How do I solve the animation problem in XAML C #?

我想为按钮上的反射设置动画。 你能告诉我为什么它不起作用吗? 我的猜测是,重点是我的元素是嵌套的,因此它不能引用它来制作动画。

<Grid Background="Black">
        <Grid.Resources>
            <Storyboard
                x:Name="animation"
                Storyboard.TargetName="btn"
                Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[1].(TranslateTransform.X)">
                <DoubleAnimation
                    RepeatBehavior="Forever"
                    From="-100"
                    To="100"
                    Duration="0:0:1" />
            </Storyboard>
        </Grid.Resources>
        <Button x:Name="btn"
            Width="200"
            Height="50"
            HorizontalAlignment="Center"
            VerticalAlignment="Center">
            <Button.Template>
                <ControlTemplate>
                    <Grid Background="LightGreen">
                        <TextBlock
                            HorizontalAlignment="Center"
                            VerticalAlignment="Center"
                            Text="TRY FOR FREE" />
                        <Grid
                            x:Name="grid"
                            Width="20"
                            Height="70">
                            <Grid.Background>
                                <LinearGradientBrush StartPoint="0,2" EndPoint="0,0">
                                    <GradientStop Offset="1.1" Color="Yellow" />
                                    <GradientStop Offset="0.5" Color="Transparent" />
                                </LinearGradientBrush>
                            </Grid.Background>
                            <Grid.RenderTransform>
                                <TransformGroup>
                                    <RotateTransform Angle="30" CenterX="20" />
                                    <TranslateTransform x:Name="transform" X="0" />
                                </TransformGroup>
                            </Grid.RenderTransform>
                        </Grid>
                    </Grid>
                </ControlTemplate>
            </Button.Template>
        </Button>
    </Grid>

在此处输入图片说明

你有两个问题。 一个是您已经说过的,即您已在无法访问Storyboard的位置定义了Storyboard.TargetProperty 您的第二个问题是您没有显示任何 XAML 或任何触发动画开始的代码。 这是一个示例,显示了Storyboard的更正位置,以及一个EventTrigger ,用于在加载Grid时启动Storyboard

编辑:这是一个 WPF 解决方案。 对于 UWP,请继续滚动。

<Grid Background="Black">
    <Button x:Name="btn" Width="200" Height="50" HorizontalAlignment="Center" VerticalAlignment="Center">
        <Button.Template>
            <ControlTemplate>
                <Grid Background="LightGreen">
                    <TextBlock
                        HorizontalAlignment="Center"
                        VerticalAlignment="Center"
                        Text="TRY FOR FREE" />
                    <Grid
                        x:Name="grid"
                        Width="20"
                        Height="70">
                        <Grid.Resources>
                            <Storyboard x:Key="animateme" x:Name="animation"
                                Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[1].(TranslateTransform.X)">
                                <DoubleAnimation RepeatBehavior="Forever" From="-100" To="100" Duration="0:0:1" />
                            </Storyboard>
                        </Grid.Resources>
                        <Grid.Background>
                            <LinearGradientBrush StartPoint="0,2" EndPoint="0,0">
                                <GradientStop Offset="1.1" Color="Yellow" />
                                <GradientStop Offset="0.5" Color="Transparent" />
                            </LinearGradientBrush>
                        </Grid.Background>
                        <Grid.RenderTransform>
                            <TransformGroup>
                                <RotateTransform Angle="30" CenterX="20" />
                                <TranslateTransform x:Name="transform" X="0" />
                            </TransformGroup>
                        </Grid.RenderTransform>
                        <Grid.Triggers>
                            <EventTrigger RoutedEvent="FrameworkElement.Loaded">
                                <EventTrigger.Actions>
                                    <BeginStoryboard Storyboard="{StaticResource animateme}"/>
                                </EventTrigger.Actions>
                            </EventTrigger>
                        </Grid.Triggers>
                    </Grid>
                </Grid>
            </ControlTemplate>
        </Button.Template>
    </Button>
</Grid>

这是一个 UWP 解决方案

<Grid Background="Black">
    <Button x:Name="btn" Width="200" Height="50" HorizontalAlignment="Center" VerticalAlignment="Center">
        <Button.Template>
            <ControlTemplate>
                <Grid Background="LightGreen">
                    <TextBlock
                        HorizontalAlignment="Center"
                        VerticalAlignment="Center"
                        Text="TRY FOR FREE" />
                    <Grid
                        x:Name="grid"
                        Width="20"
                        Height="70">
                        <Grid.Background>
                            <LinearGradientBrush StartPoint="0,2" EndPoint="0,0">
                                <GradientStop Offset="1.1" Color="Yellow" />
                                <GradientStop Offset="0.5" Color="Transparent" />
                            </LinearGradientBrush>
                        </Grid.Background>
                        <Grid.RenderTransform>
                            <TransformGroup>
                                <RotateTransform Angle="30" CenterX="20" />
                                <TranslateTransform x:Name="transform" X="0" />
                            </TransformGroup>
                        </Grid.RenderTransform>
                        <Grid.Triggers>
                            <EventTrigger RoutedEvent="FrameworkElement.Loaded">
                                <EventTrigger.Actions>
                                    <BeginStoryboard>
                                        <Storyboard x:Name="animation" Storyboard.TargetName="grid"
                                Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[1].(TranslateTransform.X)">
                                            <DoubleAnimation RepeatBehavior="Forever" From="-100" To="100" Duration="0:0:1" />
                                        </Storyboard>
                                    </BeginStoryboard>
                                </EventTrigger.Actions>
                            </EventTrigger>
                        </Grid.Triggers>
                    </Grid>
                </Grid>
            </ControlTemplate>
        </Button.Template>
    </Button>
</Grid>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM