2010-05-14 16 views
6

Kullanıcıların, WPF'de köşelerini sürükleyerek çalışma zamanında bir TextBox denetimini yeniden boyutlandırmasına izin vermekle ilgili nasıl giderim diye merak ettim. Daha az önemlisi, tüm kontrollerin yeniden boyutlandırılması için kullanılan aynı tekniktir? WPF'de Çalıştırma Sırasında Metin Kutusunu Yeniden Boyutlandırma

teşekkür :) ederiz

+0

Çoğalt: http://stackoverflow.com/questions/771275/resizing-a-control-in-wpf – Heinzi

+2

Bu bağlantıda hiçbir şey olarak çoğaltılan olarak işaretlenmemelidir. –

cevap

6

Sen metin, kullanıcının hizalamalarını germek için ayarlanması ve gridsplitters ile bir tablo gibi, yeniden boyutlandırmak bir kabın içine yerleştirerek (ya resizeable pencerede) denemelisiniz. Özel olarak yeniden boyutlandırılabilen bir metin kutusu oluşturmaya çalışmaktan çok daha kolaydır ve düzeninizin geri kalanıyla daha iyi çalışır.

DÜZENLEME: İşte gerçek uygulamasından bir örnek :

<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

Bu sizin durumunuz için mükemmel değil, ancak düşündüğünüz ilk şey olmalı. –

+0

İlginç, bunu şimdi deniyorum! :-) +1 –

6

tehMick cevabı kesinlikle doğrudur: Kesinlikle boyutlandırma ziyade TextBox kendisi özelleştirme yapmak için bir kapsayıcı oluşturmak gerekir. Ve eğer sizin için çalışıyorsa GridSplitter kutuda çok iyi bir çözümdür.

Aynı durum vardı ama GridSplitter işe yaramazdı, bu yüzden iki boyutta yeniden boyutlandırmak için dört köşesinde fare geçişlerini işleyen bir "ResizeBorder" denetimi veya bir tarafa yeniden boyutlandırmak için kenarların ortasını oluşturdum. Bu aslında çok basit bir koddur: Sadece MouseDown'ı işleyin, MouseDown konumunu ve sürüklenen yan/köşeyi veren yerel bir değişken ayarlayın, ardından MouseMove'da boyutu güncelleyin.

ResizeBorder'im stileble oldu, böylece kenarlarda köşelerde ve satırlarda yalnızca dört kutu ya da hayal edebileceğim daha karmaşık bir şey gösterebiliyordum.

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

ya göre:

Ayrıca, bir Izgara ve GridSplitters veya ResizeBorder veya başka bir şey kullanıyor olun, böyle kontrolün etrafında yeniden boyutlandırma işlevselliği ya koyarak seçim var olduğuna dikkat TextBox kendisi için ControlTemplate güncelleme: Bu sonuncu yöntem

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

... 

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

avantajları şunları yapabilirsiniz TextBoxes boyutlandırılabilir yapmak için bir stil veya ekli özelliğini kullanmak ve ca o ki vardır n TextBox'ın yeniden boyutlandırılabilirliğini kod içinde dinamik olarak kolayca değiştirebilirsiniz.

+0

Bunlar iyi seçeneklerdir +1 –

İlgili konular