1

ScaleTransform.ScaleX我试图在 C#而不是 XAMLScaleTransform.ScaleY中创建故事板来控制图像的缩放,因此我可以轻松地更改DoubleAnimation.

到目前为止,我相信我已经创建了动画并将其添加到新的故事板中,并且当我检查断点时,C# 中的适当值会发生变化,但它实际上并没有工作。

我的 C# 看起来像这样:

    public void SetStatistics(double[] value)
    {
        Storyboard sb = new Storyboard();
        sb.Duration = new Duration(TimeSpan.FromSeconds(1));

        //Wedge Animation X-Axis    
        DoubleAnimation wax = new DoubleAnimation();
        //Wedge Animation Y-Axis  
        DoubleAnimation way = new DoubleAnimation();

        ScaleTransform st = ((ScaleTransform)FindName("wedge1scale"));

        wax = new DoubleAnimation();
        way = new DoubleAnimation();
        wax.Duration = sb.Duration;
        way.Duration = sb.Duration;

        sb.Children.Add(wax);
        sb.Children.Add(way);

        Storyboard.SetTargetProperty(wax, new PropertyPath("(ScaleTransform.ScaleX)"));

        //End scale from calculation with an Enum value
        wax.To = StatMin + (StatPercent * value[1]);
        //Start scale from current value
        wax.From = st.ScaleX;

        Storyboard.SetTargetProperty(way, new PropertyPath("(ScaleTransform.ScaleY)"));

        //End scale from calculation with an Enum value
        way.To = StatMin + (StatPercent * value[1]);
        //Start scale from current value
        way.From = st.ScaleY;

        Storyboard.SetTarget(wax, Wedge1);
        Storyboard.SetTarget(way, Wedge1);

        Main.Resources.Add("animation", sb);

        sb.Begin();
    }

我的 XAML 图像是这样的:

    <Image x:Name="Wedge1" Source="Images/Wedge.png" RenderTransformOrigin="-0.008,1.027" Height="682" Width="263" Canvas.Left="869.04" Canvas.Top="-158.251" >

        <Image.RenderTransform>
              <TransformGroup>
                    <ScaleTransform x:Name="wedge1scale" ScaleX="0.555" ScaleY="0.555"/>
                    <TranslateTransform X="88.102" Y="-4.381"/>
              </TransformGroup>
        </Image.RenderTransform>
    </Image>

在此先感谢您的任何信息 :)

4

1 回答 1

1

问题是你的PropertyPath. 您必须编写RenderTransform.Children[0].ScaleXandRenderTransform.Children[0].ScaleY才能为Image 中 TransformGroup 的第一个子级的ScaleX和属性设置动画。ScaleYRenderTransform

var wax = new DoubleAnimation { Duration = TimeSpan.FromSeconds(1) };
var way = new DoubleAnimation { Duration = TimeSpan.FromSeconds(1) };

wax.To = ...
way.To = ...

Storyboard.SetTargetProperty(
    wax, new PropertyPath("RenderTransform.Children[0].ScaleX"));
Storyboard.SetTargetProperty(
    way, new PropertyPath("RenderTransform.Children[0].ScaleY"));

Storyboard.SetTarget(wax, Wedge1);
Storyboard.SetTarget(way, Wedge1);

var sb = new Storyboard();
sb.Children.Add(wax);
sb.Children.Add(way);
sb.Begin();

如果没有故事板,代码会更少:

var wax = new DoubleAnimation { Duration = TimeSpan.FromSeconds(1) };
var way = new DoubleAnimation { Duration = TimeSpan.FromSeconds(1) };

wax.To = ...
way.To = ...

wedge1scale.BeginAnimation(ScaleTransform.ScaleXProperty, wax);
wedge1scale.BeginAnimation(ScaleTransform.ScaleYProperty, way);

我猜在你的情况下没有必要设置From属性,因为动画默认从当前属性值开始。

于 2013-06-18T19:06:39.827 回答