Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用情节提要在代码中设置矩形位置动画_C#_Xaml_Windows Phone 8_Storyboard_Puzzle - Fatal编程技术网

C# 使用情节提要在代码中设置矩形位置动画

C# 使用情节提要在代码中设置矩形位置动画,c#,xaml,windows-phone-8,storyboard,puzzle,C#,Xaml,Windows Phone 8,Storyboard,Puzzle,我正在Windows Phone 8上制作c#/xaml益智游戏。 我有一个带有行和列的网格,每个网格中都有一个矩形。 (我在运行时添加了这些矩形) 我已经有了一个代码,如果我点击它,它会将一个矩形移动到另一列或行中 我正在尝试使用故事板使此过渡成为平滑的动画 下面是一段代码,它不起作用,但显示了我想要做的事情 private void AnimateRectangle(Rectangle rectangle, int sourceColumn, int sourceRow, int t

我正在Windows Phone 8上制作c#/xaml益智游戏。 我有一个带有行和列的网格,每个网格中都有一个矩形。 (我在运行时添加了这些矩形)

我已经有了一个代码,如果我点击它,它会将一个矩形移动到另一列或行中

我正在尝试使用故事板使此过渡成为平滑的动画

下面是一段代码,它不起作用,但显示了我想要做的事情

    private void AnimateRectangle(Rectangle rectangle, int sourceColumn, int sourceRow, int targetColumn, int targetRow)
    {
        Storyboard s = new Storyboard();
        DoubleAnimation doubleAniColumn = new DoubleAnimation();
        doubleAniColumn.From = sourceColumn;
        doubleAniColumn.To = targetColumn;
        doubleAniColumn.Duration = new Duration(TimeSpan.FromMilliseconds(500));
        Storyboard.SetTarget(doubleAniColumn, rectangle);
        Storyboard.SetTargetProperty(doubleAniColumn, new PropertyPath("(Grid.SetColumn)"));

        DoubleAnimation doubleAniRow = new DoubleAnimation();
        doubleAniRow.From = sourceRow;
        doubleAniRow.To = targetRow;
        doubleAniRow.Duration = new Duration(TimeSpan.FromMilliseconds(500));
        Storyboard.SetTarget(doubleAniRow, rectangle);
        Storyboard.SetTargetProperty(doubleAniRow, new PropertyPath("(Grid.SetRow)"));

        s.Children.Add(doubleAniColumn);
        s.Children.Add(doubleAniRow);

        s.Begin();
    }

任何帮助都将不胜感激。

嗯,您无法设置网格.Row属性的动画,因为0.5没有意义。它是第0行或第1行

这里可以做的是设置其位置的动画,并在完成后更改行和列。像这样:

private void AnimateRectangle(Rectangle rectangle, int sourceColumn, int sourceRow, int targetColumn, int targetRow)
{
rectangle.RenderTransform = new CompositeTransform();

    Storyboard s = new Storyboard();
    DoubleAnimation doubleAniColumn = new DoubleAnimation();
    doubleAniColumn.From = 0;
    doubleAniColumn.To = ...; // calculate correct offset here
    doubleAniColumn.Duration = new Duration(TimeSpan.FromMilliseconds(500));
    Storyboard.SetTarget(doubleAniColumn, rectangle);
    Storyboard.SetTargetProperty(doubleAniColumn, new PropertyPath("(UIElement.RenderTransform).(CompositeTransform.TranslateY)"));

    DoubleAnimation doubleAniRow = new DoubleAnimation();
    doubleAniRow.From = 0;
    doubleAniRow.To = ...; // calculate correct offset here
    doubleAniRow.Duration = new Duration(TimeSpan.FromMilliseconds(500));
    Storyboard.SetTarget(doubleAniRow, rectangle);
    Storyboard.SetTargetProperty(doubleAniRow, new PropertyPath("(UIElement.RenderTransform).(CompositeTransform.TranslateX)"));

    s.Children.Add(doubleAniColumn);
    s.Children.Add(doubleAniRow);

    EventHandler eventHandler = null;
    eventHandler = (sender, o) =>
    {
        s.Completed -= eventHandler;
        Grid.SetRow(rectangle, targetRow);
        Grid.SetColumn(rectangle, targetColumn);
        rectangle.RenderTransform = new CompositeTransform();
    };
    s.Completed += eventHandler;
    s.Begin();
}

我是从头开始写这段代码的,所以如果一开始没有编译,请不要介意。

+1,很好的一段代码只在你的脑海中出现;)我已经检查了你的代码,它是好的,但是有三个小的修正:eventhandler=(sender,o)-否则它会弄乱s
情节提要,CompositeTransform.TranslateX不是.X。第一个应该是TranslateY。我已经改正了(如果你不介意的话)。