3

画像とボタンのグリッドがあり、モーションをある位置から別の位置 (実際には左側にいくつかのスペース) に自動的にアニメートしたいのですが、うまくいきません。以下のコードのように、xaml とプログラムでストーリーボードを使用してみましたが、現在は機能しています。助けてください!!!

    public static void MoveTo(Grid target)
    {
        Canvas.SetLeft(target, 0);

        var top = Canvas.GetTop(target);
        var left = Canvas.GetLeft(target);
        TranslateTransform trans = new TranslateTransform();
        target.RenderTransform = trans;
        double newX = (double)(left - 300);
        double newY = (double)top;
        DoubleAnimation anim1 = new DoubleAnimation(top, -15, TimeSpan.FromSeconds(10));
        //DoubleAnimation anim1 = new DoubleAnimation(top, newY - top, TimeSpan.FromSeconds(10));

        DoubleAnimation anim2 = new DoubleAnimation(left, newX - left, TimeSpan.FromSeconds(10));
        anim1.AutoReverse = true;
        anim1.RepeatBehavior = RepeatBehavior.Forever;
        trans.BeginAnimation(TranslateTransform.XProperty, anim1);
        trans.BeginAnimation(TranslateTransform.YProperty, anim2);
    }
4

2 に答える 2

5

完全にTranslateTransformはあなたが望むものには適していません.思考アニメーションを使用する方が良い

canavasを使用せずにグリッドに変更することをお勧めしますが、canavasを使用する場合はこのコードを使用してください

 private void Animationsss(Grid grd)
        {
            //create an animation
            DoubleAnimation da = new DoubleAnimation();
            //set from animation to start position 
            //dont forget set canvas.left for grid if u dont u will get error
            da.From = Canvas.GetLeft(grd);
            //set second position of grid
            da.To = -100;
            //set duration
            da.Duration = new Duration(TimeSpan.FromSeconds(2));
            //run animation if u want stop ,start etc use story board
            grd.BeginAnimation(Canvas.LeftProperty, da);

        }

グリッドコードを使用する場合は次のとおりです。

 private void Animation(Grid grd)
        {
            ThicknessAnimation ta = new ThicknessAnimation();
            //your first place
            ta.From = grd.Margin;
            //this move your grid 1000 over from left side
            //you can use -1000 to move to left side
            ta.To = new Thickness(1000, 0, 0, 0);
            //time the animation playes
            ta.Duration = new Duration(TimeSpan.FromSeconds(10));
            //dont need to use story board but if you want pause,stop etc use story board
            grd.BeginAnimation(Grid.MarginProperty, ta);
        }

グリッドをフェードするために不透明アニメーションを使用できます...移動してフェードするとうまく表示されます!

    private void Animationsss(Grid grd)
        {
            DoubleAnimation da = new DoubleAnimation(1, 0, new Duration(TimeSpan.FromSeconds(2)));
            grd.BeginAnimation(Grid.OpacityProperty, da);
        }

canavas を grid に変更できる理由がない場合は、このコードの下のコードのようなサイズ変更コントロールにTranslateTransformを使用することをお勧めします。

private void grid1_MouseEnter(object sender, MouseEventArgs e)
        {
            //at first its normal size
            ScaleTransform st = new ScaleTransform(1, 1);
            //animation size to 1.25 persent of real size
            DoubleAnimation da = new  DoubleAnimation(1,1.25, new Duration(TimeSpan.FromSeconds(2)));
            //set transform to control
            grid1.RenderTransform = st;
            //animation transform now From Y And X
            st.BeginAnimation(ScaleTransform.ScaleXProperty, da);
            st.BeginAnimation(ScaleTransform.ScaleYProperty, da);
        }

幅または高さのアニメーションを行う場合は、スケール変換のように同じ作業を行います:)

私があなたを助けることを願っています... :))

私にコメントを残してください

于 2012-05-05T10:18:19.040 に答える
3

これには xaml も使用できます。

<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="TestBed.MainWindow"
x:Name="Window"
Title="MainWindow"
Width="640" Height="480">
<Window.Resources>
    <Storyboard x:Key="MoveGrid">
        <ThicknessAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Margin)" Storyboard.TargetName="grid">
            <EasingThicknessKeyFrame KeyTime="0:0:1" Value="-300,0,0,0"/>
        </ThicknessAnimationUsingKeyFrames>
    </Storyboard>
</Window.Resources>
<Window.Triggers>
    <EventTrigger RoutedEvent="ButtonBase.Click" SourceName="button">
        <BeginStoryboard x:Name="MoveGrid_BeginStoryboard" Storyboard="{StaticResource MoveGrid}"/>
    </EventTrigger>
</Window.Triggers>
<Canvas>
    <Grid x:Name="grid" Height="300" Width="300" Background="Black">
        <Button x:Name="button" Content="Move the gird!" Height="30" Margin="10,0" />
    </Grid>         
</Canvas>
</Window>
于 2012-05-07T14:51:39.900 に答える