none
无法解析属性路径“(FrameworkElement.LayoutTransform).(TransformGroup.Children)[3].(TranslateTransform.X)”中的所有属性引用。请确认适用的对象支持这些属性 RRS feed

  • 问题

  •    DoubleAnimation myDoubleAnimation = new DoubleAnimation();
                myDoubleAnimation.From = item.Center.X;
                myDoubleAnimation.To = item.Center.X - 500;
                myDoubleAnimation.Duration = new Duration(TimeSpan.FromSeconds(1));
                myDoubleAnimation.AutoReverse = true;
                Storyboard myStoryboard = new Storyboard();
                myStoryboard.Children.Add(myDoubleAnimation);
                 Storyboard.SetTargetProperty(myDoubleAnimation,
                 new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)"));
                myStoryboard.Begin(item);

     

    各种方法都试了  移动动画这么难吗??

    就是不好使   new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)"));

    就是这句不好设置!!

    WPF 动画系统比android 的复杂,使用不太方便。。。。。。。。

     

     

     


    vc815
    2011年12月18日 13:52

全部回复

  • .xmal中

    <item .....>

        <item.RenderTransform>

          <TransformGroup>

            。。。随便哪个Transform

            <TranslateTransform></TranslateTransform> 这是第4个,索引为3,你再试试,OK了。item 设置为 Ellipse试一下。Good Luck!

          </TransformGroup>

        </item.RenderTransform>

    <item .....>

    2011年12月18日 16:23
  • 个人认为用这种Transform来平移不太好,因为他的实际坐标并没有改变,

     

    建议使用另一个动画来做移动动画

    例如一个Button

    如果你没有很复杂的逻辑的话,不需要用Storyboard

    直接用ThicknessAnimation

    ThicknessAnimation ta = new ThicknessAnimation(button.Margin,new Thickness(0,200,0,0),TimeSpan.FromSeconds(1));

    button.BeginAnimation(Button.MarginProperty,ta);

    如果要结束动画的事件,就注册ta.Completed事件

     

    另外你也可以使用DoubleAnimation

    比如把你要进行动画的元素放在Canvas里,设置Canvas.Left属性

    如果使用Storyboard,

    Storyboard里要写成

    Storyboard.SetTargetProperty(ta,
                 new PropertyPath("(Canvas.Left)"));多个括号,其他不变
    如果直接用DoubleAnimation 那么就   button.BeginAnimation(Canvas.LeftProperty,ta);

    还有其他办法,例如注册一个依赖属性

    用动画执行这个依赖属性.然后再依赖属性的CallBack里监听这个属性.发生改变,时,则使用这个属性作为你变换的参数.

     

    代码手写,如有拼写错误,请谅解


    Hero
    2011年12月19日 11:47
  • .xmal中

    <item .....>

        <item.RenderTransform>

          <TransformGroup>

            。。。随便哪个Transform

            <TranslateTransform></TranslateTransform> 这是第4个,索引为3,你再试试,OK了。item 设置为 Ellipse试一下。Good Luck!

          </TransformGroup>

        </item.RenderTransform>

    <item .....>


     我用代码实现的!

    item 是scatterview!

    你这样应该没问题 但是不符合我的环境要求! 谢谢

    还是没有解决我的问题

     


    vc815
    2011年12月19日 12:23
  • 个人认为用这种Transform来平移不太好,因为他的实际坐标并没有改变,

     

    建议使用另一个动画来做移动动画

    例如一个Button

    如果你没有很复杂的逻辑的话,不需要用Storyboard

    直接用ThicknessAnimation

    ThicknessAnimation ta = new ThicknessAnimation(button.Margin,new Thickness(0,200,0,0),TimeSpan.FromSeconds(1));

    button.BeginAnimation(Button.MarginProperty,ta);

    如果要结束动画的事件,就注册ta.Completed事件

     

    另外你也可以使用DoubleAnimation

    比如把你要进行动画的元素放在Canvas里,设置Canvas.Left属性

    如果使用Storyboard,

    Storyboard里要写成

    Storyboard.SetTargetProperty(ta,
                 new PropertyPath("(Canvas.Left)"));多个括号,其他不变
    如果直接用DoubleAnimation 那么就   button.BeginAnimation(Canvas.LeftProperty,ta);

    还有其他办法,例如注册一个依赖属性

    用动画执行这个依赖属性.然后再依赖属性的CallBack里监听这个属性.发生改变,时,则使用这个属性作为你变换的参数.

     

    代码手写,如有拼写错误,请谅解


    Hero


    你好 的要移动的项目比较特殊

    scaterview 这个是surface里的一个可以拖拽控件 很难动画移动他!!


    vc815
    2011年12月19日 12:25
  • 写了个例子给你看下,实现移动

    你可以建一个类,把这个代码放进去,然后创建这个类,添加到界面上,然后调用DoAnimation方法看效果

    using System;
    using System.Windows.Controls;
    using System.Windows;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    
    namespace WpfApplication3
    {
        public class CustomButton : Button
        {
            public double MyProperty
            {
                get { return (double)GetValue(MyPropertyProperty); }
                set { SetValue(MyPropertyProperty, value); }
            }
            public static PropertyMetadata pm = new PropertyMetadata(0.0, new PropertyChangedCallback(callback));
    
            // Using a DependencyProperty as the backing store for MyProperty.  This enables animation, styling, binding, etc...
            public static readonly DependencyProperty MyPropertyProperty =
                DependencyProperty.Register("MyProperty", typeof(double), typeof(CustomButton), pm);
    
    
            public static void callback(DependencyObject sender, DependencyPropertyChangedEventArgs e)
            {
    //这个SingletonClass是我用于存放单例的类.这样至少可以全局调用这个控件
                SingletonClass.customButton.RenderTransform = new TranslateTransform(Convert.ToDouble(e.NewValue), 0);
            }
    
            public void DoAnimation()
            {
                DoubleAnimation doubleAnimation = new DoubleAnimation(0.0, 50.0, TimeSpan.FromSeconds(5));
                this.BeginAnimation(MyPropertyProperty, doubleAnimation);
            }
        }
    }
    

    我这里创建了一个MyProperty的依赖项

    然后用动画执行这个依赖项,然后再依赖项的ChangedCallback里,设置这个控件的TranslateTransform,实现偏移
     


    Hero
    2011年12月19日 13:49
  • 写了个例子给你看下,实现移动

    你可以建一个类,把这个代码放进去,然后创建这个类,添加到界面上,然后调用DoAnimation方法看效果

    using System;
    using System.Windows.Controls;
    using System.Windows;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    
    namespace WpfApplication3
    {
        public class CustomButton : Button
        {
            public double MyProperty
            {
                get { return (double)GetValue(MyPropertyProperty); }
                set { SetValue(MyPropertyProperty, value); }
            }
            public static PropertyMetadata pm = new PropertyMetadata(0.0, new PropertyChangedCallback(callback));
    
            // Using a DependencyProperty as the backing store for MyProperty.  This enables animation, styling, binding, etc...
            public static readonly DependencyProperty MyPropertyProperty =
                DependencyProperty.Register("MyProperty", typeof(double), typeof(CustomButton), pm);
    
    
            public static void callback(DependencyObject sender, DependencyPropertyChangedEventArgs e)
            {
    //这个SingletonClass是我用于存放单例的类.这样至少可以全局调用这个控件
                SingletonClass.customButton.RenderTransform = new TranslateTransform(Convert.ToDouble(e.NewValue), 0);
            }
    
            public void DoAnimation()
            {
                DoubleAnimation doubleAnimation = new DoubleAnimation(0.0, 50.0, TimeSpan.FromSeconds(5));
                this.BeginAnimation(MyPropertyProperty, doubleAnimation);
            }
        }
    }
    

    我这里创建了一个MyProperty的依赖项

    然后用动画执行这个依赖项,然后再依赖项的ChangedCallback里,设置这个控件的TranslateTransform,实现偏移
     


    Hero

    谢谢 又让我了解属性依赖项了解些!

    但是 和我的问题对不上啊!你在讲解动画实现的方法 不知道仔细看我上面的代码了吗?
    应该很简单吧!但是 Storyboard.SetTargetProperty(myDoubleAnimation,
                 new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)"));
    这句设置“目标属性” 总是设置不好! 导致动画无法实现 报错!

    在我的代码基础上怎样才能更改好!实现最简单的移动动画呢“?而不是 说关于动画的其他问题!主要是我的代码!!!!!谢谢


    vc815
    2011年12月19日 14:45
  • You said some not so friendly,I guess you probably are not Chinese,So I forgive you;

    let me think about your question


    Hero
    2011年12月19日 14:57
  • You have to use a Storyboard?
    Hero
    2011年12月19日 15:08
  • If you don't have to use Storyboard, you can do it

     DoubleAnimation doubleAnimation = new DoubleAnimation(0.0, 50.0, TimeSpan.FromSeconds(5));
                ((this.RenderTransform as TransformGroup).Children[2] as TranslateTransform).BeginAnimation(TranslateTransform.XProperty, doubleAnimation);
    

    If you have to use Storyboard, let me thick again :)
     


    Hero
    2011年12月19日 15:19
  • I copied your code in my solution, and on success

    so i think may be you should check the other code in your solution.

    Can you  tell me your E-mail.

    I'll send a example to you.

    Sorry,My English is not very good.

     

     

     

     


    Hero
    2011年12月19日 15:47
  • 1. Item.RenderTransform = New TranslateTransform

    2. new PropertyPath("(UIElement.RenderTransform).(TranslateTransform.X)"))

    2011年12月19日 16:47
  • 1. Item.RenderTransform = New TranslateTransform

    2. new PropertyPath("(UIElement.RenderTransform).(TranslateTransform.X)"))


    His Item.RenderTransform is a list,not TranslateTransform
    Hero
    2011年12月20日 2:28
  • I copied your code in my solution, and on success

    so i think may be you should check the other code in your solution.

    Can you  tell me your E-mail.

    I'll send a example to you.

    Sorry,My English is not very good.

     

     

     

     


    Hero


    vc815vc@gmal.com

    thanks !

    by the way  i am chinese


    vc815
    2011年12月20日 2:34
  • RenderTransform 并非只能是 List,可以只有一个 Transform,你试过以后就会明白。
    2011年12月20日 9:14
  • I copied your code in my solution, and on success

    so i think may be you should check the other code in your solution.

    Can you  tell me your E-mail.

    I'll send a example to you.

    Sorry,My English is not very good.

     

     

     

     


    Hero


    vc815vc@gmal.com

    thanks !

    by the way  i am chinese


    vc815


    总是被当做垃圾邮件

    http://dl.dbank.com/c0neavj1ym

    在这里下载吧


    Hero

    2011年12月20日 10:05
  • RenderTransform 并非只能是 List,可以只有一个 Transform,你试过以后就会明白。

    你好,这个我知道,我说的是楼主的代码里,他的RenderTransform是一个TransformGroup
    Hero
    2011年12月20日 10:06
  • 问题好像不出在动画使用上

    好像出在我要实施动画的控件上   上面的方法我都试验了

     

    我要动画的控件是ScatterViewItem 或LibraryStackItem 

    现在不报错了,但是ScatterViewItem 依然没有动画效果 好像是他给屏蔽了!!!???

     这两个是surface中的控件

    楼上各个能把你们的动画用在他们上试试么?我没有试验成

    谢谢


    vc815
    • 已编辑 vc815 2011年12月21日 2:43
    2011年12月21日 2:18
  • Storyboard.SetTargetProperty(
                    YourStoryboard,
                    new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)"));

    这样就可以了。

    2013年12月10日 8:32