2008-11-11 6 views
81

ऐसा लगता है कि यह आसान होना चाहिए लेकिन मैं स्टंप हो गया हूं। डब्ल्यूपीएफ में, मुझे एक टेक्स्टबॉक्स चाहिए जो उसके माता-पिता की चौड़ाई तक फैला है, लेकिन केवल अधिकतम चौड़ाई तक। समस्या यह है कि मैं चाहता हूं कि इसे अपने माता-पिता के भीतर उचित ठहराया जाए। इसे फैलाने के लिए आपको क्षैतिज एलाइनमेंट = "स्ट्रेच" का उपयोग करना होगा, लेकिन फिर परिणाम केंद्रित है। मैंने क्षैतिज सामग्री के साथ प्रयोग किया है, लेकिन ऐसा कुछ नहीं लगता है।क्षैतिज चेतावनी = खिंचाव, मैक्सविड्थ, और बाएं एक ही समय में गठबंधन?

मैं इस नीले पाठ बॉक्स को खिड़की के आकार के साथ बढ़ने के लिए कैसे प्राप्त करूं, अधिकतम 200 पिक्सल की चौड़ाई हो, और उचित ठहर जाए?

<Page 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <StackPanel> 
    <TextBox Background="Azure" Text="Hello" HorizontalAlignment="Stretch" MaxWidth="200" /> 
    </StackPanel> 
</Page> 

चाल क्या है?

+0

कृपया देखें [टैग "चाहिए सवालों में शामिल हैं" "उनके शीर्षकों में?"] (http://meta.stackexchange.com/questions/19190/should- questi ऑन-इन-टैग-इन-इन-टाइटल), जहां आम सहमति है "नहीं, उन्हें नहीं करना चाहिए"! * हाँ, मुझे पता है ... केवल विरासत कारणों से:) * –

उत्तर

81

आप बाईं ओर HorizontalAlignment सेट कर सकते हैं, अपने MaxWidth सेट और फिर बाँध पेरेंट तत्व की ActualWidth को Width:

<Page 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <StackPanel Name="Container"> 
    <TextBox Background="Azure" 
    Width="{Binding ElementName=Container,Path=ActualWidth}" 
    Text="Hello" HorizontalAlignment="Left" MaxWidth="200" /> 
    </StackPanel> 
</Page> 
+7

ऑटोरेसाइज नहीं करता .. सामग्री के अनुरूप होने लगता है .. क्या मुझे कुछ याद आ रही है? – Gishu

+0

यह मेरे चांदी के खिलाड़ी – resopollution

+2

@Gishu को क्रैश करने लगता है, सुनिश्चित करें कि आप 'कंटेनर' तत्व पर 'क्षैतिज चेतावनी =" खिंचाव "सेट करें। (पी।, मुझे एहसास है कि आपने 6 साल पहले उस प्रश्न से पूछा था।) –

41
<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*" MaxWidth="200"/> 
    </Grid.ColumnDefinitions> 

    <TextBox Background="Azure" Text="Hello" /> 
</Grid> 
+0

मुझे लगता है कि आपको टेक्स्टबॉक्स के लिए वर्टिकल एलाइनमेंट = "टॉप" सेट करने की आवश्यकता है .. डिफ़ॉल्ट रूप से खिंचाव लग रहा है। – Gishu

+1

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

+1

मैं एक ही समस्या को हल करने की कोशिश करते हुए इस प्रश्न में आया था। मेरे मामले में यह सबसे अच्छा जवाब है क्योंकि यह WinRT में काम करता है। दूसरा जवाब ऐसा नहीं है क्योंकि आप WinRT में वास्तविक विडथ पर बाध्य नहीं कर सकते हैं। – Slade

8

दोनों दिए गए उत्तर समस्या मैं कहा गया है के लिए काम किया - धन्यवाद!

हालांकि मेरे असली एप्लिकेशन में, मैं स्क्रॉलव्यूयर के अंदर एक पैनल को बाधित करने की कोशिश कर रहा था और केंट की विधि ने किसी कारण से इसे बहुत अच्छी तरह से संभाला नहीं था, मैंने ट्रैक करने के लिए परेशान नहीं किया था। असल में नियंत्रण मैक्सविड्थ सेटिंग से आगे बढ़ सकता है और मेरा इरादा हरा सकता है।

नियर की तकनीक अच्छी तरह से काम करती है और स्क्रॉलव्यूयर के साथ समस्या नहीं होती है, हालांकि इसके लिए देखने के लिए एक मामूली चीज है। आप यह सुनिश्चित करना चाहते हैं कि टेक्स्टबॉक्स पर दाएं और बाएं मार्जिन 0 पर सेट हैं या वे रास्ते में आ जाएंगे। वर्टिकल स्क्रॉलबार दिखाई देने पर मुद्दों से बचने के लिए मैंने वास्तविक विडियो के बजाय व्यूपोर्टविड्थ का उपयोग करने के लिए बाध्यकारी भी बदल दिया।

6

आप अपने DataTemplate की चौड़ाई के लिए इसका उपयोग कर सकते हैं:

Width="{Binding ActualWidth,RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ScrollContentPresenter}}}" 

सुनिश्चित करें कि आपके DataTemplate जड़ मार्जिन = "0" (आप कुछ पैनल रूट के रूप में इस्तेमाल करते हैं और के बच्चों के लिए मार्जिन सेट कर सकते हैं है बनाओ कि रूट)

0

मैं का प्रयोग करेंगे SharedGroupSize

<Grid> 
    <Grid.ColumnDefinition> 
     <ColumnDefinition SharedGroupSize="col1"></ColumnDefinition> 
     <ColumnDefinition SharedGroupSize="col2"></ColumnDefinition> 
    </Grid.ColumnDefinition> 
    <TextBox Background="Azure" Text="Hello" Grid.Column="1" MaxWidth="200" /> 
</Grid> 
संबंधित मुद्दे