2010-09-26 13 views
6

Mam TextBlock, który musiWPF textblock zoom i owinąć

  1. pokazu tekstu w maksymalnym rozmiarze czcionki możliwe w danej przestrzeni (mniej znaków większymi literami i vice-versa)
  2. zawinąć tekst w podana przestrzeń.

Próbowałem użyć pola tekstowego wewnątrz okna podglądu, jak poniżej, ale zawijanie tekstu nie działa, jeśli nie określam szerokości i wysokości bloku tekstu. Jeśli określę szerokość i wysokość w tym samym rozmiarze co widok, to oczywiście nie nastąpi powiększenie.

<Viewbox Stretch="Fill" Width="100" Height="100"> 
<TextBlock TextWrapping="Wrap"/> 
</Viewbox> 

Czy istnieje inny sposób, aby to osiągnąć? Czy powinienem pomyśleć o napisaniu algorytmu, aby ręcznie zwiększyć rozmiar czcionki na podstawie ilości tekstu? Każda pomoc jest doceniana.

+0

Można ręcznie zrobić przerwę linii obsługując zdarzenie PreviewKeyDown lub PreviewKeyUp i sprawdzić, czy został osiągnięty limit długości tekstu. Innym sposobem na osiągnięcie tego samego wyniku: Utwórz niestandardowy konwerter i zrób tam przerwę. Możesz przekazać parametr lub użyć pola, aby określić MaxLength. – 0xbadf00d

Odpowiedz

0

Spróbuj tego kodu.

XAML:

<TextBlock x:Name="textBlock" 
      Text="Something text" 
      TextWrapping="Wrap" 
      FontSize="1" 
      Width="100" 
      Opacity="0" /> 

Kod za:

while (textBlock.ActualHeight <= 100) 
{ 
    textBlock.FontSize += 0.1; 
    textBlock.UpdateLayout(); 
} 
textBlock.FontSize -= 0.1; 
textBlock.Opacity = 1;