2011-02-23 20 views
6

क्या एक WPF UserControl का आकार बदलने का कोई तरीका है जिससे कि बच्चे के नियंत्रण न हो जाएं?सभी बच्चों के बिना WPF UserControl का आकार बदलें "

मैं इस स्टोरीबोर्ड मिल गया है:

<Storyboard> 
    <DoubleAnimation Storyboard.TargetProperty="Height" Storyboard.TargetName="MyUserControl" To="145" From="0" Duration="0:0:1" /> 
</Storyboard> 

यह महान काम करता है; यह ऊंचाई नियंत्रण शून्य से ऊंचाई 145 तक मेरा नियंत्रण लेता है - समस्या यह है कि ऊँचाई की संपत्ति में परिवर्तन होने के कारण, बच्चे के नियंत्रण में चारों ओर कूदना शुरू होता है, मुझे संदेह है कि, उनके क्षैतिज संरेखण और लंबवत वृद्धि गुणों के कारण। क्या एनीमेशन समाप्त होने तक मैं इसे अक्षम कर सकता हूं?

मैं इस उपयोगकर्ता नियंत्रण "स्लाइडिंग" के भ्रम को देखने की कोशिश कर रहा हूं - इसलिए यदि मैं इस गलत के बारे में जा रहा हूं तो मैं अन्य दृष्टिकोणों के लिए खुला हूं।

उत्तर

5

सब कुछ "चारों ओर कूद रहा है" क्योंकि हर बार Height नियंत्रण के सभी नए नियंत्रण स्थान के अनुसार सभी नियंत्रण नियंत्रणों को बदल दिया जाता है।

वांछित प्रभाव प्राप्त करने के लिए आपको नियंत्रण के वास्तविक Height को बदलने के बजाय RenderTransform का उपयोग करना चाहिए।

यहां यह है कि आप इसे कैसे कर सकते हैं। सबसे पहले, अपने नियंत्रण पर RenderTransform संपत्ति का एक मूल्य के रूप में ScaleTransform जोड़ें:

<MyUserControl.RenderTransform> 
    <ScaleTransform ScaleY="0" /> 
</MyUserControl.RenderTransform> 

फिर, अपने एनीमेशन का लक्ष्य संपत्ति को संशोधित बदलने की ScaleY संपत्ति को बदलने के लिए:

<Storyboard> 
    <DoubleAnimation Storyboard.TargetProperty="RenderTransform.(ScaleTransform.ScaleY)" Storyboard.TargetName="MyUserControl" To="145" Duration="0:0:1" /> 
</Storyboard> 

अद्यतन:

स्लाइड-इन-व्यू प्रभाव प्राप्त करने का एक और तरीका TranslateTransform नकारात्मक Y मान के साथ उपयोग करना है:

<MyUserControl.RenderTransform> 
    <TranslateTransform Y="-1000" /> 
</MyUserControl.RenderTransform> 

और फिर, चेतन अपने Y संपत्ति 0:

<Storyboard> 
    <DoubleAnimation Storyboard.TargetProperty="RenderTransform.(TranslateTransform.Y)" Storyboard.TargetName="MyUserControl" To="0" Duration="0:0:1" /> 
</Storyboard> 
+0

यह काम करता है, नियंत्रण अब चारों ओर कूद नहीं है; हालांकि, जब तक ट्रांसफॉर्म पूरा नहीं हो जाता तब तक वे अब तक फैले हुए दिखाई देते हैं। मैं स्वीकार कर रहा हूं क्योंकि यह मेरे पास जितना बेहतर था, लेकिन यदि आपके पास खिंचाव से बचने पर कोई विचार है जो बहुत अच्छा होगा। – Nate

+0

@Nate - मेरा अपडेट देखें। –

1

जब आप ऊंचाई या चौड़ाई UserControl अपने बच्चों को बताता है भी फिर से समायोजित करने के लिए चेतन, कि जिस तरह से लेआउट प्रणाली WPF में काम करता है । 'चारों ओर कूदना' वास्तव में आपके द्वारा उपयोग किए जाने वाले लेआउट (ग्रिड, स्टैकपैनेल इत्यादि) पर निर्भर करेगा।

लेकिन ऐसा लगता है कि, आपके परिदृश्य के लिए ऊंचाई को एनिमेट करने के बजाय RenderTransform ScaleTransform ScaleY एनीमेशन का उपयोग करना बेहतर होगा। Rendertransform UserControl की अपनी लेआउट व्यवस्था को परेशान नहीं करेगा।

0

पावलोव के अद्यतन उत्तर में जोड़ने के लिए, मुझे इसके बजाय एक खाली कंपोजिट ट्रान्सफॉर्म का उपयोग करना पड़ा। हो सकता है कि यह विजुअल स्टूडियो 2012 अपडेट 1 के लिए नवीनतम मिश्रण का उपयोग करने के कारण है, लेकिन यह काम करता है (विंडोज फोन 8 को लक्षित करना):

<MyUserControl.RenderTransform> 
     <CompositeTransform /> 
    </MyUserControl.RenderTransform> 
संबंधित मुद्दे