WPF

2010-05-14 24 views
6

में रनटाइम पर टेक्स्टबॉक्स का आकार बदलना बस सोच रहा था कि मैं उपयोगकर्ता को डब्ल्यूपीएफ में अपने कोनों को खींचकर रनबॉक्स पर टेक्स्टबॉक्स नियंत्रण का आकार बदलने के बारे में कैसे कहूंगा। कम महत्वपूर्ण बात यह है कि सभी नियंत्रणों के आकार के लिए उपयोग की जाने वाली एक ही तकनीक है?WPF

आप :) धन्यवाद

+0

डुप्लिकेट: http://stackoverflow.com/questions/771275/resizing-a-control-in-wpf – Heinzi

+2

इसे डुप्लिकेट के रूप में चिह्नित नहीं किया जाना चाहिए क्योंकि उस लिंक पर कुछ भी काम नहीं करता है। –

उत्तर

6

तो टेक्स्ट बॉक्स के संरेखण फैलाने के लिए की स्थापना और एक कंटेनर है कि आप आकार बदल सकते हैं अंदर रखकर gridsplitters के साथ एक ग्रिड की तरह, (या एक resizeable विंडो में) कोशिश करनी चाहिए। एक कस्टम आकार बदलने योग्य टेक्स्टबॉक्स बनाने की कोशिश करने से कहीं अधिक आसान है, और यह आपके शेष लेआउट के साथ बेहतर काम करेगा।

संपादित करें: यहाँ एक वास्तविक app से एक उदाहरण है:

<Grid>... 
<GridSplitter Grid.Row="1" Grid.ColumnSpan="2" ResizeDirection="Rows" HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Height="4" BorderThickness="0,0,0,1" BorderBrush="Gray" Background="Transparent"/> 
<TextBox Grid.Row="2" Grid.Column="0" Margin="6,6,6,6" Name="RequestTextBox" VerticalScrollBarVisibility="Auto" TextWrapping="Wrap" Text="{Binding Request, Mode=TwoWay}"/> 
<GridSplitter Grid.Row="2" Grid.ColumnSpan="2" ResizeDirection="Rows" HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Height="4" BorderThickness="0,0,0,1" BorderBrush="Gray" Background="Transparent"/> 
...</Grid> 
+0

यह संभव है कि यह आपके मामले के लिए सही नहीं है, लेकिन यह पहली बात होनी चाहिए जो आप मानते हैं। –

+0

दिलचस्प, मैं कोशिश कर रहा हूं कि अभी बाहर! :-) +1 –

6

tehMick का जवाब बिल्कुल सही है: आप निश्चित रूप से करने के बजाय आकार बदलने पाठ बॉक्स खुद को अनुकूलित करने के लिए एक कंटेनर बनाने चाहिए। और यदि यह आपके लिए काम करता है GridSplitter एक बहुत अच्छा इन-द-बॉक्स समाधान है।

मेरे पास एक ही स्थिति थी लेकिन ग्रिडस्प्लिटर काम नहीं करेगा, इसलिए मैंने एक "ResizeBorder" नियंत्रण बनाया जिसने अपने चार कोनों पर माउस ड्रैग को दो आयामों में आकार देने के लिए, या किनारों के बीच में आकार बदलने के लिए नियंत्रित किया। यह वास्तव में बहुत ही सरल कोड है: बस माउसडाउन को संभालें, एक स्थानीय चर सेट करें जो माउसडाउन स्थान और साइड/कोने को खींचा जा रहा है, फिर माउसमोव आकार को अपडेट करें।

मेरा ResizeBorder स्टाइल करने योग्य था, इसलिए मैं किनारों पर किनारों और रेखाओं पर केवल चार बक्से दिखा सकता था, या कुछ भी जटिल जो मैं सपना देख सकता था।

इसके अलावा, ध्यान दें कि आप एक ग्रिड और GridSplitters या एक ResizeBorder या कुछ और का उपयोग कर रहे हैं, तो आप इस तरह नियंत्रण के चारों ओर अपने आकार बदलने कार्यक्षमता या तो डालने का विकल्प है:

<my:ResizeBorder ...> 
    <TextBox ... /> 
</my:ResizeBorder> 

या द्वारा पाठ बॉक्स के लिए ही ControlTemplate अद्यतन करने:

<ControlTemplate x:Key="ResizableTextBox" TargetType="{x:Type TextBox}"> 
    <my:ResizeBorder> 
    ... 
    </my:ResizeBorder> 
</ControlTemplate> 

... 

<TextBox Template="{StaticResource ResizableTextBoxTemplate}" ... /> 

बाद इस विधि के लाभ है कि आप और बनाने के लिए हो सकता है बक्सें आकार बदलने योग्य एक शैली या संलग्न संपत्ति का उपयोग कर सकते है कि आप ca हैं n कोड में गतिशील रूप से टेक्स्टबॉक्स की आकार बदलने योग्यता को आसानी से बदलें।

+0

वे अच्छे विकल्प +1 हैं –

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