2013-04-11 7 views
7

Gibt es eine Möglichkeit, die Anzahl der Zeilenumbrüche in einem Textblock mit TextWrapping="Wrap" zu erkennen?Erkennen Sie die Anzahl der Zeilenumbrüche in TextBlock mit Wrap?

Ich erwäge, eine nicht-monospaced Schriftart zu verwenden. Ich brauche das, weil ich ein neues und personalisiertes MessageBox-Fenster erstelle, das einen großen Texttitel, Animationen, das Logo meiner Anwendung und das Thema meiner Anwendung enthält.

Es ist klar, dass ich die Größe des Fensters entsprechend der Anzahl der LineBreaks der Nachricht Nachricht ändern muss - ähnlich wie das Standard-MessageBox-Fenster verhält.

+0

Ich denke, um die Höhe des Textblocks zu überprüfen, aber ich gründe keinen guten Weg dazu. Ich denke nicht, dass das die einzige Lösung ist. Entschuldigung für mein Englisch. – Guilherme

+1

Sie können sich dies [Lösung] (http://stackoverflow.com/questions/5720302/wpf-get-wrapped-text-out-of-a-textbox) ansehen. Es geht um TextBox, aber kann Ihnen trotzdem helfen. – Herdo

+0

können Sie die ActualHeight-Eigenschaft verwenden – Avishek

Antwort

5

Sie können sehen, wie viel txtName.ActualHeight Sie ohne Umbruch erhalten, und teilen Sie die ActualHeight (mit Umbruch) durch den Wert, den Sie zuvor erhalten haben. Sie sollten die Anzahl der Zeilen erhalten.

Hinweis: Sie erhalten nicht die tatsächliche Höhe im Konstruktor. Sie werden es bekommen, nachdem der Textblock im Formular gerendert wurde.

zB: (NoWrap)

txt.ActualHeight 
311.0 

(Wrap)

txt.ActualHeight 
1420.4400000000019 

So

int lineCount = (txt.ActualHeight/311.0) 

Hoffe, es hilft :)

-Update als pro Frage Update:

Wenn Sie messagebox Höhe wie pro Ihre TextBlock- Höhe festlegen müssen, können Sie einfach tun:

msgbox.Height = txt.ActualHeight + 10; 

// Ich habe 10 nur wenig Spielraum für das Hinzufügen.

+0

Ja, ich werde es versuchen. Ich denke, das ist der beste Weg, aber wenn ich die Schriftgröße ändern muss, muss ich erneut testen und neu berechnen, und das möchte ich nicht. – Guilherme

+0

@Guilherme: Überprüfen Sie meine aktualisierte Antwort, Sie können Neuberechnungen vermeiden. – Avishek

1

Windows kann seine Größe basierend auf dem Inhalt anpassen. Siehe die SizeToContent Eigenschaft.

+0

Ja, das funktioniert mit der Größe des Fensters, aber in diesem speziellen Fall brauche ich wegen einiger Animationen und anderer Steuerelemente einen "weniger automatischen" Weg. Wie auch immer, vielen Dank für die Hilfe. +1 – Guilherme