2011-07-28 15 views
7

में क्षैतिज विस्तार से किसी पाठ बॉक्स मैं निम्नलिखित शैली मेरी App.xamlरोकें WPF

<Style x:Key="textBoxMultiline" TargetType="{x:Type TextBox}" > 
    <Setter Property="VerticalScrollBarVisibility" Value="Auto" /> 
    <Setter Property="HorizontalScrollBarVisibility" Value="Hidden" /> 
    <Setter Property="MinHeight" Value="50" /> 
    <Setter Property="TextWrapping" Value="Wrap" /> 
</Style> 

में और समाधान हर पाठ बॉक्स में एक संक्षिप्त पाठ की जरूरत है पर हम इसे प्रयोग कर रहे हैं भर में परिभाषित किया गया है।

<TextBox x:Name="textBoxDescription" Grid.Row="2" Grid.Column="1" Style="{DynamicResource textBoxMultiline}" /> 

सब कुछ अच्छा काम करता है, लेकिन फिर ग्राहक के बारे में कुछ क्षेत्रों कम रिज़ॉल्यूशन वाले बड़े मॉनिटर पर corped थे शिकायत करता है, तो मैं उच्च दृश्य पेड़ नोड्स corping को रोकने के लिए में से एक पर एक ScrollViewer रखा।

<ScrollViewer Height="Auto" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"> 
    ... 
</ScrollViewer> 

अजीब, ऊपर शैली के साथ TextBox तों बजाय सही करने के लिए विस्तार हो रहा पाठ लपेटकर शुरू करते हैं।

ScrollViewer को हटाए बिना इसे रोकने का कोई तरीका है?

उत्तर

4

TextBox के लिए आपको MaxWidth को परिभाषित करना होगा, अन्यथा कोई सीमा नहीं है क्योंकि ScrollViewer है।

+0

मैं अलग चौड़ाई की बक्सें साथ कि शैली का उपयोग कर रहा करने के लिए

HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" 

जोड़ सकते हैं। मैं थोड़ी सी सामान्य समाधान की तलाश कर रहा था जैसे टेक्स्टबॉक्स टेम्पलेट को ओवरराइड करना, निश्चित चौड़ाई को शामिल करने के लिए और उस पाठ तत्व वास्तविकता को उस नई तत्व चौड़ाई में बाध्य करना। यह बहुत अधिक प्रबलता प्रतीत होता है, लेकिन मैं ऐसा कुछ ढूंढ रहा था जो केवल टेक्स्टबॉक्स शैली को बदलता है। – dcarneiro

+0

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

+0

क्षैतिज स्क्रॉलबार एक हैक था क्योंकि अन्य नियंत्रण कम संकल्प स्क्रीन पर फसल लगाए गए थे। मैंने टेक्स्टबॉक्स चौड़ाई को एक ही चौड़ाई के तत्व पर बांधने की कोशिश की (उसी शैली के साथ एक ही ग्रिड सेल पर एक और टेक्स्टबॉक्स लेकिन छुपा) और यह काम किया। लेकिन फिर मैंने पाया कि टेक्स्टब्लॉक जहां टेक्स्ट को लपेटने के बजाय जानकारी क्षैतिज रूप से फैली हुई थी। यह मुझे बताता है कि क्षैतिज स्क्रॉलबार टेक्स्टवैपिंग संपत्ति पर प्राथमिकता लेता है। तो मुझे लगता है कि मुझे कम स्क्रीन संकल्पों का समर्थन करने के लिए यूआई को फिर से डिजाइन करना होगा। – dcarneiro

7

आप चौड़ाई मुश्किल कोड नहीं करना चाहते हैं तो आप तत्व मूल आइटम की चौड़ाई बाध्यकारी लिए जा सकते हैं ... यहाँ एक नमूना

यहाँ मैं scrolviewer वास्तविक चौड़ाई के साथ पाठ बॉक्स maxwidth बाध्यकारी रहा हूँ। और आपको यह भी सुनिश्चित करना होगा कि columndefinition चौड़ाई को "ऑटो" पर "*" पर सेट नहीं किया जाना चाहिए। आप ऑटो के लिए सेट अगर यह ScrollViewer चौड़ाई उपेक्षा और ScrollViewer और पाठ बॉक्स की चौड़ाई के विस्तार पर रखेंगे .. मैं तुम्हें इस मामले ....

<Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*"></ColumnDefinition> 
      <ColumnDefinition Width="*"></ColumnDefinition> 
     </Grid.ColumnDefinitions> 
     <ScrollViewer HorizontalScrollBarVisibility="Auto" Name="scv"> 
      <TextBox Height="30" TextWrapping="Wrap" MaxWidth="{Binding ElementName=scv,Path=ActualWidth}"></TextBox> 
     </ScrollViewer> 
    </Grid> 
+1

अफसोस की बात है ScrollViewer और TextBox (es) के बीच कई VisualTreeItems हैं और वे एक ही UserControl पर भी नहीं हैं। इसके बावजूद अभी भी मार्जिन/पैडिंग ऑफसेट हैं। AFAIK असली चुनौती जहां एक पूर्वज उपयोगकर्ता नियंत्रण के क्षैतिज आकार बदलने पर टेक्स्टव्रपिंग को प्राथमिकता देना है। – dcarneiro

4

समाधान से प्रदान की में गिर लगता है @bathineni मुझे मेरी समस्या हल करने में मदद की। यहां मेरे लिए क्या काम किया गया है:

<Grid > 
     <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="50"/> 
     <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 
     <Button Grid.Column="0" Width="30" Height="23" Margin="10,5" Content="..."/> 
     <ScrollViewer Grid.Column="1" HorizontalScrollBarVisibility="Disabled" verticalScrollBarVisibility="Disabled" Name="scv"> 
      <TextBox Height="25" Text="Insert here long text" MaxWidth="{Binding ElementName=scv, Path=ActualWidth}" HorizontalAlignment="Stretch" /> 
     </ScrollViewer> 
    </Grid> 
0

मेरे लिए काम करता है। आप स्क्रॉलबार पाठ बॉक्स में प्रदर्शित करना चाहते हैं, तो टेक्स्ट बॉक्स