2013-04-11 7 views
7

Czy istnieje sposób wykrywania liczby linii przerw w bloku tekstu z TextWrapping="Wrap"?Wykryj liczbę podziałów linii w bloku tekstowym przy zawijaniu?

Rozważam użycie czcionki o stałej szerokości. Potrzebuję tego, ponieważ tworzę nowe i spersonalizowane okno MessageBox, które ma duży tytuł tekstowy, animacje, logo mojej aplikacji i motyw mojej aplikacji.

Jest oczywiste, że muszę zmienić rozmiar okna w zależności od liczby linii w treści wiadomości - podobnie jak zachowuje się domyślne okno MessageBox.

+0

Zastanawiam się, czy sprawdzić wysokość bloku tekstu, ale nie znalazłem na to dobrej metody. Nie sądzę, że to jedyne rozwiązanie. Przepraszam za mój angielski. – Guilherme

+1

Możesz rzucić okiem na to [rozwiązanie] (http://stackoverflow.com/questions/5720302/wpf-get-wrapped-text-out-of-a-textbox). Chodzi o TextBox, ale nadal może ci pomóc. – Herdo

+0

można użyć właściwości ActualHeight – Avishek

Odpowiedz

5

Możesz zobaczyć, ile dostajesz txtName.ActualHeight bez oblewania, a następnie podziel ActualHeight (z wrap) o wartość, którą otrzymałeś wcześniej. Powinieneś uzyskać liczbę linii.

Uwaga: nie można uzyskać rzeczywistej wysokości w konstruktorze. Dostaniesz go po renderowaniu bloku tekstowego w formularzu.

np (Bez zawijania)

txt.ActualHeight 
311.0 

(Wrap)

txt.ActualHeight 
1420.4400000000019 

Więc

int lineCount = (txt.ActualHeight/311.0) 

Nadzieja to pomaga :)

Aktualizacja jako za aktualizacją pytanie:

Jeśli trzeba ustawić wysokość MessageBox jak na swój wzrost textblock, można po prostu to zrobić:

msgbox.Height = txt.ActualHeight + 10; 

// Dodałem 10 tylko do dodawania mały margines.

+0

Tak, spróbuję to zrobić. Myślę, że jest to najlepszy sposób, jednak jeśli będę musiał zmienić rozmiar czcionki, będę musiał ponownie przetestować i ponownie przeliczyć, a tego nie chcę. – Guilherme

+0

@Guilherme: Sprawdź moją zaktualizowaną odpowiedź, możesz uniknąć ponownego obliczania. – Avishek

1

System Windows może dostosować swój rozmiar do zawartości. Zobacz właściwość SizeToContent.

+0

Tak, działa to z rozmiarem okna, ale w tym konkretnym przypadku potrzebuję "mniej automatycznego" sposobu, z powodu niektórych animacji i innych elementów sterujących. W każdym razie, wielkie dzięki za pomoc. +1 – Guilherme

Powiązane problemy