2009-05-19 13 views
9

मुझे कुछ मदद चाहिए। पता नहीं है कि यह संभव है या नहीं। मैं निम्नलिखित करना चाहता हूं:wpf टेक्स्टबॉक्स टेक्स्टव्रेपिंग

<Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
     <TextBox TextWrapping="Wrap" MinLines ="5"/> 
    </Grid> 

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

वर्तमान में उपर्युक्त चौड़ाई के साथ एक टेक्स्टबॉक्स देगा लेकिन जब पाठ दर्ज किया जाता है तो टेक्स्टबॉक्स की चौड़ाई बस पाठ के साथ बढ़ती है।

मुझे पता है कि मैं MaxWidth =? सेट कर सकता हूं, लेकिन कॉलम बिंदु * है कि मुझे नहीं पता कि कॉलम का आकार क्या है।

मैं टेक्स्टबॉक्स से कहना चाहूंगा "बढ़ो मत, जो भी डब्ल्यूपीएफ आपको लेता है और उससे ऊपर एक और पिक्सेल नहीं बढ़ाता"।

मुझे लगता है कि मैं जो चाहता हूं वह असंभव है, क्योंकि डब्ल्यूपीएफ नियंत्रण को पूछता है कि यह कितना बड़ा होना चाहता है और जब उपयोगकर्ता सीमा से परे चला जाता है तो अधिक टेक्स्ट जोड़ता है, यह कृपया अधिक जगह का अनुरोध करता है और इसकी चौड़ाई को अनंत तक बढ़ा देता है।

उत्तर

9

MaxWidthTextBox की संपत्ति को अपने तारांकित कॉलम की ActualWidth संपत्ति पर बाध्य करने का प्रयास करें (आपको ऐसा करने के लिए अपने कॉलम का नाम देना होगा)। मुझे पूरा यकीन है कि मैंने पहले ऐसा कुछ किया है।

कुछ की तरह:

MaxWidth={Binding ElementName=MyColumn, Path=ActualWidth} 

गुड लक!

+0

यह ठीक दिखता है, लेकिन यह काम नहीं करता है क्योंकि कॉलमडिफिनिशन की वास्तविकविड्थ संपत्ति निर्भरता नहीं है और मैक्सविड्थ हमेशा 0 होगी। अभी परीक्षण किया गया है ... – Vale

0

टेक्स्टबॉक्स पर Grid.Column="1" सेट करते समय मेरे लिए ठीक से काम करने लगता है।

+0

+1 अच्छा कॉल, मैंने ध्यान नहीं दिया कि टेक्स्टबॉक्स दूसरे कॉलम में प्रदर्शित होने के लिए कहा नहीं गया था (जैसा कि वह चाहता है)। :) – Pwninstein

+0

मुझे लगता है कि वह इसे कॉलम 0 में चाहता है। – Crispy

+0

वह ऊपर बताता है: "... जो चौड़ाई वाले ग्रिड कॉलम के अंदर एक टेक्स्टबॉक्स रैपिंग है"। चौड़ाई वाला स्तंभ = "*" दूसरा स्तंभ है (ग्रिड। कॉलम = "1")। – Pwninstein

0

क्या RandomEngy कहते हैं के बारे में Grid.Column="1" के अलावा, आप भी Grid पर ही कुछ संरेखण गुण सेट करने के लिए, यह (जैसे एक StackPanel) अलग बच्चे Stretch व्यवहार के साथ एक और कंटेनर के अंदर सेट है विशेष रूप से अगर हो सकता है।

+0

"कुछ संरेखण गुण" में चाहता हूं? कौन सा, और क्या? – Anthony

+0

@ एंथनी: यह इस बात पर निर्भर करता है कि ग्रिड को कैसे होस्ट किया जाता है। एक WPF तत्व का आकार बदलना व्यवहार न केवल तत्व पर निर्भर करता है, बल्कि यह भी कि कौन सा तत्व इसे होस्ट कर रहा है। इसे क्रिया में देखने के लिए, विंडो के अंदर, स्टैकपैनल के अंदर एक बटन (डब्ल्यू/टेक्स्ट) बनाएं। StackPanel के अभिविन्यास को बदलें और बटन के आकार बदलने में अंतर का निरीक्षण करें ... – micahtan

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