Wie ordne ich dem Text in einem TextBlock eine vertikale Mittenausrichtung zu? Ich habe die TextAlignment-Eigenschaft gefunden, aber sie dient zur horizontalen Textausrichtung. Wie mache ich das für die vertikale Textausrichtung?
wpf
vertical-alignment
textblock
Ameise
quelle
quelle
TextAlignment
nur die horizontale Ausrichtung beeinflusst, nicht die vertikale Ausrichtung (wie in der Frage angegeben).Antworten:
Ein Textblock selbst kann keine vertikale Ausrichtung durchführen
Der beste Weg, dies zu tun, den ich gefunden habe, besteht darin, den Textblock innerhalb eines Rahmens zu platzieren, damit der Rand die Ausrichtung für Sie übernimmt.
Hinweis: Dies entspricht funktional der Verwendung eines Rasters. Es hängt nur davon ab, wie die Steuerelemente in den Rest Ihres Layouts passen sollen, welches besser geeignet ist
quelle
Während Orion Edwards Answer in jeder Situation funktioniert, kann es schwierig sein, den Rahmen hinzuzufügen und die Eigenschaften des Rahmens jedes Mal festzulegen, wenn Sie dies tun möchten. Eine andere schnelle Möglichkeit besteht darin, den Abstand des Textblocks festzulegen:
quelle
Der TextBlock unterstützt keine vertikale Textausrichtung.
Ich arbeite darum, indem ich den Textblock mit einem Raster umschließe und HorizontalAlignment = "Stretch" und VerticalAlignment = "Center" setze.
So was:
quelle
TextBlock
aufEllipse
innen einGrid
. Sie müssen meine Eigenschaften für Breite und Höhe nicht binden oder etwas Schwieriges tun.Sie können Label anstelle von Textblock verwenden.
quelle
Wenn Sie auf das Umbrechen von Text verzichten können , ist das Ersetzen des TextBlocks durch ein Etikett meiner Meinung nach der prägnanteste Weg, dies zu tun. Andernfalls folgen Sie einer der anderen gültigen Antworten.
quelle
TextBlock
unterstützt keine vertikale Ausrichtung des Inhalts. Wenn Sie verwenden müssenTextBlock
Sie es in Bezug auf das übergeordnete Element ausrichten.Wenn Sie jedoch
Label
stattdessen verwenden können (und sie haben sehr ähnliche Funktionen), können Sie den Textinhalt positionieren:Das
Label
wird gedehnt, um seine Grenzen standardmäßig zu füllen, was bedeutet, dass der Text des Etiketts zentriert wird.quelle
VerticalAlignment="Center"
Behebt für mich dieses Problem.Dies könnte daran liegen, dass das
TextBlock
in ein Raster eingeschlossen ist, aber dann ist praktisch alles in wpf.quelle
Ich habe festgestellt, dass das Ändern des Textfeldstils (dh :)
controltemplate
und das anschließende Ändern derPART_ContentHost
vertikalen Ausrichtung auf Mitte den Trick ausführtquelle
Geben Sie diesem XAML nur zum Kichern einen Wirbel. Es ist nicht perfekt, da es keine 'Ausrichtung' ist, aber Sie können die Textausrichtung innerhalb eines Absatzes anpassen.
quelle
Wenn Sie die Höhe von TextBlock übersehen können, sollten Sie Folgendes verwenden:
quelle
In meinem Fall habe ich dies getan, um das
TextBlock
Display schöner zu machen .Der Trick, um den Text weiter von unten zu entfernen, besteht darin, ihn festzulegen
quelle
Sie können meinen Blog-Beitrag sehen. Sie können die benutzerdefinierte Höhe von Textblock über Codebehind festlegen. Um die benutzerdefinierte Höhe festzulegen, müssen Sie sie in einem Rahmen oder einem Stapelfenster festlegen
http://ciintelligence.blogspot.com/2011/02/wpf-textblock-vertical-alignment-with.html
quelle
Ich stellte fest, dass ich es etwas anders machen musste. Mein Problem war, dass wenn ich die Schriftgröße änderte, der Text in der TextBox nach oben verschoben wurde, anstatt mit den restlichen TextBoxen in der Zeile unten zu bleiben. Durch Ändern der Vert-Ausrichtung von oben nach unten konnte ich die Schriftart programmgesteuert von Größe 20 auf Größe 14 und zurück ändern, wobei die Schwerkraft des Texts unten blieb und die Dinge ordentlich blieben. Hier ist wie:
quelle
Um die Antwort von @Orion Edwards zu erweitern, gehen Sie wie folgt vor: Code-Behind (keine Stile festgelegt). Erstellen Sie im Grunde eine benutzerdefinierte Klasse, die von Border erbt und deren untergeordnetes Element auf eine Textbox festgelegt ist. Im folgenden Beispiel wird davon ausgegangen, dass Sie nur eine einzelne Zeile möchten und dass der Rand ein untergeordnetes Element einer Leinwand ist. Es wird auch davon ausgegangen, dass Sie die MaxLength-Eigenschaft der TextBox basierend auf der Breite des Rahmens anpassen müssen. Im folgenden Beispiel wird auch der Cursor des Rahmens so eingestellt, dass er ein Textfeld nachahmt, indem er auf den Typ 'IBeam' gesetzt wird. Ein Rand von '3' wird festgelegt, damit die TextBox nicht absolut links vom Rand ausgerichtet ist.
Klasse:
quelle
Ich denke, es ist besser, ein Label (oder TextBlock) in ein Label zu verwenden. Sie können ein Mausereignis nicht direkt im Rahmensteuerelement anhängen. Schließlich wird es im TextBlock angehängt. Dies ist meine Empfehlung:
quelle
Ich denke, es ist ratsam, ein Textfeld ohne Rand und Hintergrund zu verwenden, um auf einfache und schnelle Weise zum mittig ausgerichteten Textblock zu gelangen
quelle
quelle
TextBlock
, nichtTextBox
. -1