2011-06-06 18 views
25

कल्पना के अनुसार मैं एक खिड़की पर दो WPF बटन, सामग्री के साथ इस प्रकार है:समान रूप से आकार बटन सबसे बड़ा बटन की सामग्री

<Button>OK</Button> 
<Button>Cancel</Button> 

मैं इन बटन एक ही चौड़ाई होना चाहता हूँ, फिर भी एक परिदृश्य में जहाँ में Content किसी दिए गए उपयोगकर्ता की भाषा के लिए स्थानीय मान के लिए बाध्य है, मुझे नहीं पता कि नई सामग्री को समायोजित करने के लिए बटनों को कितनी विस्तृत करने की आवश्यकता है।

मैं इन बटनों की न्यूनतम चौड़ाई कैसे लागू कर सकता हूं, जैसे कि व्यापक (चौड़ाई के अनुसार) की चौड़ाई प्रभावी रूप से MinWidth दोनों के रूप में उपयोग की जाती है, इस प्रकार उन्हें समान बनाते हैं?

या इसे एक और तरीका रखने के लिए: मैं नहीं चाहता कि बटन उनके कंटेनर की चौड़ाई हो (जब तक कि एक चालाक तरीके से कंटेनर का उपयोग न हो, मेरी समस्या का उत्तर है), और मैं उन्हें प्रत्येक नहीं चाहता सिर्फ अपनी सामग्री के आकार के लिए क्योंकि इससे उन्हें अलग-अलग आकार मिलेंगे। मुझे बीच में कुछ चाहिए। अपनी सामग्री को प्रदर्शित करने के लिए आकार की सबसे बड़ी सामग्री वाला एक, और अन्य सभी एक ही चौड़ाई के आकार के लिए, इसलिए चौड़ाई सभी बराबर होती है।

मुझे उम्मीद है कि उत्तर उन्हें किसी प्रकार के कंटेनर में रखने में निहित है। मुझे पता है कि मैं Grid का उपयोग कर सकता हूं और उन्हें ग्रिड "सेल्स" भरने देता हूं, लेकिन बिंदु यह नहीं है कि मैं उन्हें भी चौड़ा होना चाहता हूं। मुझे पता है कि मेरे पास कुछ कोड-पीछे हो सकता है जो बटनों की Content_Changed घटना पर चलता है और मिनीविड्थ को सबसे व्यापक बटन पर सेट करता है, लेकिन मुझे शुद्ध-xaml विधि में रूचि है। हो सकता है कि मुझे ItemsControl को विस्तारित कस्टम नियंत्रण बनाने की आवश्यकता हो, जो नए आइटम जोड़े या पुनः आकार के बाद कोड-पीछे कोड करें और अन्य सभी वस्तुओं के MinWidth के रूप में विस्तृत आइटम की चौड़ाई लागू करता है।

अग्रिम में बहुत धन्यवाद।

+0

तो आप कह रहे हैं कि आप <कॉलमडिफिनिशन चौड़ाई = "ऑटो" /> का उपयोग नहीं करना चाहते हैं और बटन चौड़ाई = "ऑटो" सेट करना चाहते हैं? – Willem

+0

मैं नहीं चाहता कि बटन उनके कंटेनर की चौड़ाई हो (जब तक कि एक चालाक तरीके से एक कंटेनर का उपयोग न हो, मेरी समस्या का उत्तर है), और मैं नहीं चाहता कि वे उनकी सामग्री का आकार लें क्योंकि इससे उन्हें अलग कर दिया जाएगा आकार। मुझे बीच में कुछ चाहिए। अपनी सामग्री को प्रदर्शित करने के लिए सबसे बड़ी सामग्री वाला आकार, और अन्य सभी एक ही राशि के आकार के लिए, इसलिए चौड़ाई सभी बराबर होती है। –

+0

तो मुझे लगता है कि आपके बटन आपके दृश्य पर बिखरे हुए हैं, क्योंकि यदि नहीं, और उनके सभी समूहबद्ध हैं, तो कॉलमडिफिनिशन चाल करेगा। यदि उनके सभी बिखरे हुए हैं, तो मैं आपकी समस्या के लिए एक अच्छा समाधान भी जानना चाहूंगा। =) – Willem

उत्तर

7
Use UniformGrid 

<UniformGrid HorizontalAlignment="Right" Rows="1" Columns="2"> 
    <Button Content="Ok" Grid.Column="0"/> 
    <Button Content="Cancel" Grid.Column="1"/> 
</UniformGrid> 
+1

इस उत्तर में आपको उन बटनों के लिए दृश्यता = "संक्षिप्त" सेट करने की अनुमति देने का लाभ है जो आप नहीं चाहते हैं और पूरा सेल गायब हो जाता है - साझाकरण समूह समूह ग्रिड के साथ ऐसा करने से आपको छेद मिल जाता है, जो शायद आप नहीं चाहते हैं। इसके अलावा इसके terser! – Wolfshead

18

ग्रिड

<Grid HorizontalAlignment="Right" Grid.IsSharedSizeScope="true"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition SharedSizeGroup="A"/> 
     <ColumnDefinition SharedSizeGroup="A"/> 
    </Grid.ColumnDefinitions> 
    <Grid.Children> 
     <Button Grid.Column="0" Content="OK"/> 
     <Button Grid.Column="1" Content="Cancel"/> 
    </Grid.Children> 
    </Grid> 

यह टूट किया जा सकता है, तो आप सिर्फ एक आम पूर्वज पर IsSharedSizeScope निर्धारित करने की आवश्यकता है, जैसे:

<StackPanel Grid.IsSharedSizeScope="true"> 
     <Grid HorizontalAlignment="Right"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition SharedSizeGroup="A"/> 
      </Grid.ColumnDefinitions> 
      <Grid.Children> 
       <Button Grid.Column="0" Content="OK"/> 
      </Grid.Children> 
     </Grid> 
     <!-- ... --> 
     <Grid HorizontalAlignment="Left"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition SharedSizeGroup="A"/> 
      </Grid.ColumnDefinitions> 
      <Grid.Children> 
       <Button Grid.Column="0" Content="Cancel"/> 
      </Grid.Children> 
     </Grid> 
    </StackPanel> 

बहुत बड़ा बनने से रोकने के लिए बटन ग्रिड के HorizontalAlignment को Stretch से कुछ और में बदलें या MaxWidth सेट करें।

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