2008-11-14 13 views
32

मैं डब्ल्यूपीएफ के लिए काफी नया हूं और मुझे एक समस्या आई है जो हल करने में थोड़ा मुश्किल लगता है। असल में मैं एक 4x4 ग्रिड चाहता हूं जो स्केलेबल है लेकिन एक वर्ग (या कोई अन्य मनमाना) पहलू अनुपात रखता है। यह वास्तव में करने के लिए काफी मुश्किल लगता है, जो मुझे आश्चर्यचकित करता है क्योंकि मैं इसकी एक सामान्य आम आवश्यकता की कल्पना करता हूं।मैं डब्ल्यूपीएफ में स्केलेबल, स्क्रोल करने योग्य सामग्री पर पहलू अनुपात कैसे रखूं?

मैं इस तरह एक ग्रिड परिभाषा के साथ शुरू:

<Grid> 
    <Grid.RowDefinitions> 
    <Grid.RowDefinition Height="*"/> 
    <Grid.RowDefinition Height="*"/> 
    <Grid.RowDefinition Height="*"/> 
    <Grid.RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
    <Grid.ColumnDefinition Width="*"/> 
    <Grid.ColumnDefinition Width="*"/> 
    <Grid.ColumnDefinition Width="*"/> 
    <Grid.ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinition> 
    ... 
</Grid> 

अब अगर आप सेट कि फैलाने के लिए, यह विंडो भर सकते हैं या जो कुछ भी कंटेनर आप में रख पंक्तियों और स्तंभ समान होती हैं, लेकिन पहलू। अनुपात तय नहीं है।

फिर मैंने उपलब्ध स्थान का उपयोग करने के लिए इसे स्टैकपैनल में डालने का प्रयास किया। मदद नहीं की जब मुझे व्यूबॉक्स याद आया तो मुझे सबसे ज्यादा रास्ता क्या मिला।

<StackPanel Orientation="Horizontal"> 
    <Viewbox> 
    <Grid Height="1000" Width="1000"> <!-- this locks aspect ratio --> 
     <Grid.RowDefinitions> 
     <Grid.RowDefinition Height="*"/> 
     <Grid.RowDefinition Height="*"/> 
     <Grid.RowDefinition Height="*"/> 
     <Grid.RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
     <Grid.ColumnDefinition Width="*"/> 
     <Grid.ColumnDefinition Width="*"/> 
     <Grid.ColumnDefinition Width="*"/> 
     <Grid.ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinition> 
     ... 
    </Grid> 
    </viewbox> 
    <Label HorizontalAlignment="Stretch">Extra Space</Label> 
</StackPanel> 

अब मेरी सामग्री स्केल करती है और पहलू अनुपात रखती है। समस्या यह है कि यदि खिड़की पर्याप्त नहीं है तो मेरी कुछ ग्रिड स्क्रीन से बाहर है। अगर ऐसा होता तो मैं इसे स्क्रॉल करने में सक्षम होना चाहता हूं। इसी प्रकार, मुझे न्यूनतम आकार की आवश्यकता हो सकती है, जिससे लंबवत स्क्रॉलिंग भी हो सकती है।

अब मैंने अपने स्टैकपैनल और ग्रिड (अलग से) को एक उचित स्क्रॉलव्यूयर कंटेनर में डालने का प्रयास किया है, लेकिन तब सामग्री विंडो में फिट करने के लिए स्केल नहीं करती है। यह पूर्ण आकार में जाता है, जो कोई अच्छा नहीं है।

तो मैं यह करने के बारे में कैसे जा सकता हूं? क्या मैं गलत पेड़ को भड़क रहा हूँ? क्या ऐसा करने का एक बेहतर/आसान तरीका है?

उत्तर

69

आप एक ViewBox अंदर सामग्री (ग्रिड) रख दिया और निर्धारित करने की आवश्यकता Viewbox.Stretch PropertyStretch.Uniform

को Viewbox नियंत्रण और आप जिस तरह से बच्चे को खींची जाती है को नियंत्रित करने देता खिंचाव या चाइल्ड तत्व पैमाने पर करने के लिए किया जाता है। यहां examples देखें।

alt text http://i.msdn.microsoft.com/ms635549.img_mmgraphics_stretchenum(en-us,VS.90).jpg

+2

क्या फ्रेम को समान खिंचाव के किनारों पर लॉक करने का कोई तरीका है? – Jeff

-2

डाल 0.25 * बजाय प्रत्येक स्तंभ और RowWidth

0

के लिए * SizeToContent = "WidthAndHeight" सेटिंग करेंगे खिड़की आप व्यवहार आप के बाद कर रहे हैं देने पर?

5

इस उदाहरण में, अपने सबसे अच्छे शर्त एक UniformGrid है। यह केवल तभी उपयोगी होता है जब आप एनएक्सएन ग्रिड चाहते हैं।

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