2009-08-20 16 views
2

実行時にDoubleAnimationをフレームワーク要素に適用しています。ここでは、コードスニペットは次のとおりです。DoubleAnimation/XAMLを生成しようとするとエラーが発生する

foreach (FrameworkElement objInnerElement in objFrameWorkElement) 
{ 
    Point ElementPosition = new Point(Canvas.GetLeft(objInnerElement), Canvas.GetTop(objInnerElement)); 

    DoubleAnimation db = new DoubleAnimation(); 
    //db.From = objMoveIn.From; 

    db.AutoReverse = objMoveIn.AutoReverse; 
    if (objMoveIn.Repeat) 
     db.RepeatBehavior = RepeatBehavior.Forever; 
    db.Duration = TimeSpan.FromSeconds(objMoveIn.AnimationDuration); 

    Storyboard story = new Storyboard(); 
    if (objMoveIn.ddlDirection.SelectedIndex == 0) 
    { 
     //(UIElement.RenderTransform).(TransformGroup.Children)[0].(TranslateTransform.X) 
     Storyboard.SetTargetProperty(db, new PropertyPath("(FrameworkElement.RenderTransform).(TranslateTransform.X)")); 
     //Storyboard.SetTargetProperty(db, new PropertyPath(TranslateTransform.XProperty)); 
     db.From = 0 - ElementPosition.X; 
     db.To = 0; 
    } 
    else 
    { 
     Storyboard.SetTargetProperty(db, new PropertyPath("(FrameworkElement.RenderTransform).(TranslateTransform.Y)")); 
     //Storyboard.SetTargetProperty(db, new PropertyPath(TranslateTransform.YProperty)); 
     db.From = 0 - ElementPosition.X; 
     db.To = 0; 
    } 

    story.Children.Add(db); 

    BeginStoryboard beginstoryboard = new BeginStoryboard(); 
    beginstoryboard.Storyboard = story; 
    TranslateTransform oTransform = objInnerElement.RenderTransform as TranslateTransform; 

    if (oTransform == null) 
    { 
     oTransform = new TranslateTransform(); 
     oTransform.X = 0; 
     oTransform.Y = 0; 
     objInnerElement.RenderTransform = oTransform; 
    } 

    if (objMoveIn.ddlDirection.SelectedIndex == 0) 
     oTransform.BeginAnimation(TranslateTransform.XProperty, db); 
    else 
     oTransform.BeginAnimation(TranslateTransform.YProperty, db); 

    Style objStyle = new Style(); 
    EventTrigger objEventTrigger = new EventTrigger(FrameworkElement.LoadedEvent); 
    objEventTrigger.Actions.Add(beginstoryboard); 
    objStyle.Triggers.Add(objEventTrigger); 
    objInnerElement.Style = objStyle; 
} 

アニメーションが正常に動作しますが、私の問題は、私は、この適用された枠組み要素

string shapestring = XamlWriter.Save(element); 
StringReader stringReader = new StringReader(shapestring); 
XmlTextReader xmlTextReader = new XmlTextReader(stringReader); 
Element DeepCopyobject = (Element)XamlReader.Load(xmlTextReader); 

からXAMLを生成しようとしたとき、それは以下のようにエラーをスローしていることである:

{"文字列 'RenderTransform。(TranslateTransform.X)を変換できません' 属性 'TargetProperty'に オブジェクトタイプ 'System.Windows.PropertyPath'。 プロパティパスが無効です。 Can not 解決型の名前 'TranslateTransform'できません。オブジェクト 'System.Windows.Media.Animation.DoubleAnimation' でのエラー、

私を助けてください。

+0

誰か専門家ですか?私を助けてください – Ronak

答えて

0

私は正確に問題を繰り返すことができませんでしたが、私はそのようなマークアップを持っている場合:

<Canvas x:Name="canvas" 
      Grid.Row="1" 
      Grid.ColumnSpan="3"> 
     <Rectangle Canvas.Left="10" Canvas.Top="10" Width="50" 
        Height="10" 
        RadiusX="5" 
        RadiusY="5" 
        Stroke="Black" Fill="AliceBlue" /> 

     <Rectangle Canvas.Left="30" 
        Canvas.Top="100" 
        Width="50" 
        Height="10" 
        RadiusX="5" 
        RadiusY="5" 
        Stroke="Black" 
        Fill="Blue" /> 

     <Rectangle Canvas.Left="200" 
        Canvas.Top="150" 
        Width="50" 
        Height="10" 
        RadiusX="5" 
        RadiusY="5" 
        Stroke="Black" 
        Fill="Green" /> 
    </Canvas> 

と、このようなコード:

 foreach (FrameworkElement objInnerElement in canvas.Children) 
     { 
      Point ElementPosition = new Point(Canvas.GetLeft(objInnerElement), Canvas.GetTop(objInnerElement)); 

      DoubleAnimation db = new DoubleAnimation(); 

      db.RepeatBehavior = RepeatBehavior.Forever; 
      db.Duration = TimeSpan.FromSeconds(1000.0); 

      Storyboard story = new Storyboard(); 
      Storyboard.SetTargetProperty(db, new PropertyPath("(FrameworkElement.RenderTransform).(TranslateTransform.X)")); 
      db.From = 0 - ElementPosition.X; 
      db.To = 0; 

      story.Children.Add(db); 

      BeginStoryboard beginstoryboard = new BeginStoryboard(); 
      beginstoryboard.Storyboard = story; 
      TranslateTransform oTransform = objInnerElement.RenderTransform as TranslateTransform; 

      if (oTransform == null) 
      { 
       oTransform = new TranslateTransform(); 
       oTransform.X = 0; 
       oTransform.Y = 0; 
       objInnerElement.RenderTransform = oTransform; 
      } 

      oTransform.BeginAnimation(TranslateTransform.XProperty, db); 

      Style objStyle = new Style(); 
      EventTrigger objEventTrigger = new EventTrigger(FrameworkElement.LoadedEvent); 
      objEventTrigger.Actions.Add(beginstoryboard); 
      objStyle.Triggers.Add(objEventTrigger); 
      objInnerElement.Style = objStyle; 
     } 

     string shapestring = XamlWriter.Save(canvas); 
     StringReader stringReader = new StringReader(shapestring); 
     XmlTextReader xmlTextReader = new XmlTextReader(stringReader); 
     UIElement DeepCopyobject = (UIElement)XamlReader.Load(xmlTextReader); 

その作業の罰金を、エラーなし。

関連する問題