c# - 启动 Storyboard时未设置目标错误

标签 c# silverlight xaml windows-phone-8 windows-phone

我正在尝试将基于 XAML 的 Storyboard转换为代码隐藏,以便我可以同时在多个对象上使用 Storyboard的多个实例。我编写这个工厂方法来为我创建动画,但是当我启动 Storyboard 时,我似乎没有设置目标。有人可以帮助我吗,我还打算自学一种编写代码隐藏 Storyboard的有效方法。

public static Storyboard CreateSimpleTranslation(double x, double y, TimeSpan timespan, FrameworkElement target)
    {
        // original storyboard
        //<Storyboard x:Name="MoveUp">
        //    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" 
        //        Storyboard.TargetName="itemsControl">
        //        <EasingDoubleKeyFrame KeyTime="0" Value="0"/>
        //        <EasingDoubleKeyFrame KeyTime="0:0:0.02" Value="-122">
        //            <EasingDoubleKeyFrame.EasingFunction>
        //                <CircleEase EasingMode="EaseIn"/>
        //            </EasingDoubleKeyFrame.EasingFunction>
        //        </EasingDoubleKeyFrame>
        //    </DoubleAnimationUsingKeyFrames>
        //</Storyboard> 

        var newSB = new Storyboard();
        var da1 = new DoubleAnimationUsingKeyFrames();
        Storyboard.SetTargetProperty(da1, new PropertyPath("(UIElement.RenderTransform).(CompositeTransform.TranslateX)"));
        var da2 = new DoubleAnimationUsingKeyFrames();
        Storyboard.SetTargetProperty(da1, new PropertyPath("(UIElement.RenderTransform).(CompositeTransform.TranslateY)"));

        var ed1 = new EasingDoubleKeyFrame
        {
            KeyTime = KeyTime.FromTimeSpan(new TimeSpan(0, 0, 0, 0)), 
            Value = 0
        };

        var ed2 = new EasingDoubleKeyFrame
        {
            KeyTime = KeyTime.FromTimeSpan(timespan),
            Value = x,
            EasingFunction = new CircleEase() {EasingMode = EasingMode.EaseIn}
        };

        var ed3 = new EasingDoubleKeyFrame
        {
            KeyTime = KeyTime.FromTimeSpan(new TimeSpan(0, 0, 0, 0)), 
            Value = 0
        };

        var ed4 = new EasingDoubleKeyFrame
        {
            KeyTime = KeyTime.FromTimeSpan(timespan),
            Value = y,
            EasingFunction = new CircleEase() {EasingMode = EasingMode.EaseIn}
        };

        da1.KeyFrames.Add(ed1);
        da1.KeyFrames.Add(ed2);
        da2.KeyFrames.Add(ed3);
        da2.KeyFrames.Add(ed4);
        newSB.Children.Add(da1);
        newSB.Children.Add(da2);

        Storyboard.SetTarget(da1, target); 
        Storyboard.SetTarget(da2, target);

        return newSB;
    }

最佳答案

尝试按照适合我的格式重新编码

public static Storyboard CreateSimpleTranslation(double x, double y, TimeSpan timespan, FrameworkElement target)
        {
                Storyboard storyboard = new Storyboard();

                DoubleAnimationUsingKeyFrames da1 = new DoubleAnimationUsingKeyFrames();
                var ed1 = new EasingDoubleKeyFrame
                {
                    KeyTime = KeyTime.FromTimeSpan(new TimeSpan(0, 0, 0, 0)),
                    Value = 0,
                    EasingFunction = new CircleEase() { EasingMode = EasingMode.EaseIn }
                };
                da1.KeyFrames.Add(ed1);

                Storyboard.SetTarget(da1, target);
                Storyboard.SetTargetProperty(da1, new PropertyPath("(UIElement.RenderTransform).(CompositeTransform.TranslateX)"));

                storyboard.Children.Add(da1); 
                return storyboard;
       }

关于c# - 启动 Storyboard时未设置目标错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19634105/

相关文章:

c# - 获取资源文件夹路径c#

.net - Windows Phone 7,通过身份验证通过 ssl 下载 xml

c# - Silverlight 字母间距

c# - 将文本 block 绑定(bind)到 XAML 中键的字典值?

c# - 如何实现双指缩放

c# - WPF图表控件更改**系列**图例中的标题

c# - 获取正在使用 Web 服务的应用程序

c# - 确定语句/文本的正面或负面程度的算法

javascript - 从 Silverlight 迁移到 Html5/JavaScript

c# - Silverlight 组合框是如何消失的?