2011-01-03 7 views
7

मैं PathGeometry में एक हीरे के आकार वाले PolyLineSegment के साथ कैनवास क्लिप कर रहा हूं। मैं इसके प्वाइंट कोलेक्शन को एनिमेट करने की कोशिश कर रहा हूं, और लक्ष्यप्रोपर्टी को हल नहीं कर सकता। http://forums.silverlight.net/forums/p/22239/78225.aspxक्या सिल्वरलाइट में पॉलीलाइन सेगमेंट को एनिमेट करना संभव है, यानी प्वाइंटकोलेक्शन?

तो यह और भी, जिससे उसमें मूल्यों में कोई परिवर्तन करने के लिए एक PointCollection से एक Point प्राप्त करने के लिए संभव है: यह केवल अन्य संदर्भ गूगल के सभी कि काफी मैं क्या करने की कोशिश कर रहा हूँ है मिल गया है और एक ही PropertyPath है एक एनीमेशन?

उत्तर

3

दुर्भाग्य से मुझे नहीं लगता कि Polyline.Points चेतन के लिए संभव है कि ...

उन अंक वस्तु "System.Windows.Point" से हैं और समस्या यह है कि उनके "एक्स" और "वाई "गुण निर्भरता गुण नहीं हैं। दुर्भाग्य से ऐसी संपत्ति को एनिमेट करने का कोई तरीका नहीं है जो डबलएनीमेशन के साथ एक निर्भरता संपत्ति नहीं है।

उदाहरण में आपने प्रदान किया है कि एनीमेशन पथफिगर सेगमेंट (जिसमें निर्भरता गुण हैं) पर आधारित है और सिस्टम नहीं है। Windows.Point।

यदि आप उनको एनिमेट करना चाहते हैं तो मैं आपके पथ में पॉलीलाइन कनेक्शन का उपयोग करने से बचने की कोशिश करूंगा।

2

आप इस तरह बात संग्रह चेतन सकता है:

 <Canvas Background="Tan" Width="100" Height="300" Margin="5,0,0,0"> 
     <Path Stroke="RosyBrown" StrokeThickness="4" > 
      <Path.Data> 
      <PathGeometry> 
       <PathGeometry.Figures> 
       <PathFigure StartPoint="5,50"> 
        <PolyLineSegment x:Name="PLS" ></PolyLineSegment> 
       </PathFigure> 
       </PathGeometry.Figures> 
      </PathGeometry> 
      </Path.Data> 
     </Path> 
     <Canvas.Triggers> 
      <EventTrigger RoutedEvent="Canvas.Loaded" > 
      <BeginStoryboard> 
       <Storyboard x:Name="sbPathUpDown" BeginTime="0:0:0"> 
       <ObjectAnimationUsingKeyFrames x:Name="objAni" 
            Duration="0:0:2" 
           AutoReverse="True" RepeatBehavior="Forever" 
            Storyboard.TargetName="PLS" 
            Storyboard.TargetProperty="Points" > 
        <DiscreteObjectKeyFrame Value="10,50 90,50" KeyTime="0:0:0.05"></DiscreteObjectKeyFrame> 
        <DiscreteObjectKeyFrame Value="10,60 90,50" KeyTime="0:0:0.5"></DiscreteObjectKeyFrame> 
        <DiscreteObjectKeyFrame Value="10,70 105,50" KeyTime="0:0:0.9"></DiscreteObjectKeyFrame> 
        <DiscreteObjectKeyFrame Value="10,60 100,40" KeyTime="0:0:1.2"></DiscreteObjectKeyFrame> 
        <DiscreteObjectKeyFrame Value="10,50 100,50" KeyTime="0:0:1.5"></DiscreteObjectKeyFrame> 
        <DiscreteObjectKeyFrame Value="10,60 90,50" KeyTime="0:0:1.7" ></DiscreteObjectKeyFrame> 
       </ObjectAnimationUsingKeyFrames> 
       </Storyboard> 
      </BeginStoryboard> 
      </EventTrigger> 
     </Canvas.Triggers> 
     </Canvas> 

(कुछ linepoints एनिमेट - बुरा लग रहा है लेकिन बिंदु दिखाता है: ओ)

और तुम अंक की गणना और इसे और अधिक प्राप्त करना चाहते हैं, तो चिकनी आदि आप कोड में यह भर सकते हैं:

objAni.KeyFrames.Clear(); 
    double offsetx = 10.0; double offsety = 50; 
    double w = 40; double h = 40; 
    for (int i = 0; i < 20; i++) 
    { 
    var scale = i * 0.1; 
    var ww = w * scale; 
    var hh = h * scale; 
    var pts = new PointCollection(); 
    pts.Add(new Point(offsetx, offsety)); 
    pts.Add(new Point(offsetx + ww, offsety)); 
    pts.Add(new Point(offsetx + ww, offsety + hh)); 
    pts.Add(new Point(offsetx, offsety + hh)); 
    pts.Add(new Point(offsetx, offsety)); 

    objAni.KeyFrames.Add(new DiscreteObjectKeyFrame { Value = pts, KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(i/10.0)) }); 
    } 

एक बॉक्स है कि आकार में परिवर्तन खींचता - आप इसे करने के लिए किसी भी अंक जोड़ सकते हैं और प्रभाव आपको कम या ज्यादा चाहते हो सकता है।

+1

इसके साथ ही आपके आंकड़े में बदलाव की तरह आसान होना चाहिए। स्केल और घूर्णन परिवर्तन के साथ आसान है। –

संबंधित मुद्दे