2010-01-25 3 views
8

मैं यह पता लगाने की कोशिश कर रहा हूं कि नीचे दिया गया कोड क्यों काम नहीं कर रहा है। यह कोई त्रुटि नहीं देता है - यह बस स्केल नहीं करता है। यह वास्तव में काम करता प्रतीत होता है अगर मैं इसे अपने दूसरे कोड नमूना के रूप में बदलता हूं। किसी को भी कोई विचार है?कोड समस्या में एनिमेटेड स्केलट्रांसफॉर्म को लागू करना

धन्यवाद

public static void StartMouseEnterAnimation(Button button) 
    { 
     Storyboard storyboard = new Storyboard(); 

     ScaleTransform scale = new ScaleTransform(1.0, 1.0, 1, 1); 
     button.RenderTransformOrigin = new Point(0.5, 0.5); 
     button.RenderTransform = scale; 

     DoubleAnimation growAnimation = new DoubleAnimation(); 
     growAnimation.Duration = TimeSpan.FromMilliseconds(300); 
     growAnimation.From = 1; 
     growAnimation.To = 1.8; 
     storyboard.Children.Add(growAnimation); 

     Storyboard.SetTargetProperty(growAnimation, new PropertyPath(ScaleTransform.ScaleXProperty)); 
     Storyboard.SetTarget(growAnimation, scale); 

     storyboard.Begin(); 
    } 

--- निम्नलिखित करता है काम, लेकिन मैं एक और अधिक जटिल PropertyChain के माध्यम से एक TransformGroup और संदर्भ इस बनाने के लिए ...

public static void StartMouseEnterAnimation(Button button) 
    {  
     Storyboard storyboard = new Storyboard();    
     ScaleTransform scale = new ScaleTransform(1.0, 1.0, 1, 1); 
     button.RenderTransformOrigin = new Point(0.5, 0.5); 
     TransformGroup myTransGroup = new TransformGroup(); 
     myTransGroup.Children.Add(scale); 
     button.RenderTransform = myTransGroup; 

     DoubleAnimation growAnimation = new DoubleAnimation(); 
     growAnimation.Duration = TimeSpan.FromMilliseconds(100); 
     //growAnimation.From = 1; 
     growAnimation.To = 1.1; 
     storyboard.Children.Add(growAnimation); 

     DependencyProperty[] propertyChain = new DependencyProperty[] 
     { 
      Button.RenderTransformProperty, 
      TransformGroup.ChildrenProperty, 
      ScaleTransform.ScaleXProperty 
     }; 
     string thePath = "(0).(1)[0].(2)"; 
     PropertyPath myPropertyPath = new PropertyPath(thePath, propertyChain); 
     Storyboard.SetTargetProperty(growAnimation, myPropertyPath); 
     Storyboard.SetTarget(growAnimation, button); 

     storyboard.Begin(); 
    } 

उत्तर

22

मैं इसे प्राप्त करने में सक्षम था इसलिए की तरह आपके पहले कोड नमूना अदल-बदल करके काम करने के लिए:

public static void StartMouseEnterAnimation(Button button) { 
    Storyboard storyboard = new Storyboard(); 

    ScaleTransform scale = new ScaleTransform(1.0, 1.0); 
    button.RenderTransformOrigin = new Point(0.5, 0.5); 
    button.RenderTransform = scale; 

    DoubleAnimation growAnimation = new DoubleAnimation(); 
    growAnimation.Duration = TimeSpan.FromMilliseconds(300); 
    growAnimation.From = 1; 
    growAnimation.To = 1.8; 
    storyboard.Children.Add(growAnimation); 

    Storyboard.SetTargetProperty(growAnimation, new PropertyPath("RenderTransform.ScaleX")); 
    Storyboard.SetTarget(growAnimation, button); 

    storyboard.Begin(); 
} 
new PropertyPath(ScaleTransform.ScaleXProperty)) के बजाय

, मैं new PropertyPath("RenderTransform.ScaleX")) का उपयोग किया, और मैंने स्टोरीबोर्ड का लक्ष्य बटन पर सेट किया (स्केल ट्रांसफॉर्म स्वयं नहीं)।

आशा है कि मदद करता है!

3

यहां एक उदाहरण है कि स्केलट्रांसफॉर्म पर दो अलग-अलग दिशाओं में एनिमेट कैसे करें, जब आपके पास एक ट्रांसफॉर्म समूह हो। पथ स्ट्रिंग से पता चलता है कि कौन सा हिस्सा एनिमेटेड है। इसके अलावा, क्योंकि कैनवास फ्रीज करने योग्य है, आपको RegisterName होना है। (मुझे नहीं पता कि इसका क्या अर्थ है, लेकिन यह आवश्यक है)

 var storyBoard = new Storyboard(); 
     var group = new TransformGroup(); 
     var scale = new ScaleTransform(Zoom, Zoom); 
     group.Children.Add(scale); 
     group.Children.Add(new TranslateTransform(_translateX,_translateY)); 
     MainCanvas.RenderTransform = group; 

     RegisterName("MainCanvas",MainCanvas); 

     var growAnimation = new DoubleAnimation(); 
     growAnimation.Duration = TimeSpan.FromMilliseconds(1000); 
     growAnimation.From = _oldZoom; 
     growAnimation.To = Zoom; 
     storyBoard.Children.Add(growAnimation); 

     var growAnimation2 = new DoubleAnimation(); 
     growAnimation2.Duration = TimeSpan.FromMilliseconds(1000); 
     growAnimation2.From = _oldZoom; 
     growAnimation2.To = Zoom; 

     storyBoard.Children.Add(growAnimation2); 

     string thePath = "(0).(1)[0].(2)"; // Not used - just to show the syntax 


     Storyboard.SetTargetProperty(growAnimation, new PropertyPath("RenderTransform.Children[0].ScaleX")); 
     Storyboard.SetTargetProperty(growAnimation2, new PropertyPath("RenderTransform.Children[0].ScaleY")); 
     Storyboard.SetTargetName(growAnimation, "MainCanvas"); 
     Storyboard.SetTargetName(growAnimation2,"MainCanvas"); 
     storyBoard.Begin(this); 
संबंधित मुद्दे