Как назначить вертикальное выравнивание по центру текста внутри TextBlock? Я нашел свойство TextAlignment, но оно для горизонтального выравнивания текста. Как мне сделать это для вертикального выравнивания текста?
wpf
vertical-alignment
textblock
Муравей
источник
источник
TextAlignment
влияет только на горизонтальное выравнивание, а не на вертикальное выравнивание (как относится к вопросу).Ответы:
Сам текстблок не может сделать вертикальное выравнивание
Наилучший способ сделать это, как я обнаружил, - поместить текстовый блок внутри границы, чтобы граница выровнялась за вас.
Примечание: это функционально эквивалентно использованию сетки, это просто зависит от того, как вы хотите, чтобы элементы управления вписывались в остальную часть вашего макета, какой из них больше подходит
источник
Хотя Orion Edwards Answer подходит для любой ситуации, добавление границы и установка свойств границы может быть затруднительной каждый раз, когда вы хотите это сделать. Другой быстрый способ - установить отступ текстового блока:
источник
TextBlock не поддерживает вертикальное выравнивание текста.
Я работаю над этим, оборачивая текстовый блок сеткой и устанавливая HorizontalAlignment = "Stretch" и VerticalAlignment = "Center".
Как это:
источник
TextBlock
наEllipse
ВнутриGrid
. Не нужно связывать мои свойства ширины и высоты или делать что-то хитрое.Вы можете использовать метку вместо текстового блока.
источник
Если вы можете обойтись без переноса текста , я думаю, что замена TextBlock на Label - самый краткий способ сделать это. В противном случае следуйте одному из других действительных ответов.
источник
TextBlock
не поддерживает вертикальное выравнивание его содержимого. Если вы должны использовать,TextBlock
то вы должны выровнять его по отношению к его родителю.Однако, если вы можете использовать
Label
вместо этого (и они имеют очень похожую функциональность), то вы можете расположить текстовое содержимое:По
Label
умолчанию будет растягиваться, чтобы заполнить свои границы, то есть текст метки будет центрирован.источник
Для меня
VerticalAlignment="Center"
исправляет эту проблему.Это может быть связано с
TextBlock
тем, что объект обернут в сетку, но практически все в wpf.источник
Я обнаружил, что изменение стиля текстового поля (то есть:),
controltemplate
а затем изменениеPART_ContentHost
вертикального выравнивания по центру сделает свое делоисточник
Только ради хихиканья, приведите XAML в движение. Он не идеален, поскольку не является «выравниванием», но позволяет регулировать выравнивание текста в абзаце.
источник
Если вы можете пропустить высоту TextBlock, лучше использовать это:
источник
В моем случае я сделал это, чтобы сделать
TextBlock
дисплей лучше.Уловка, чтобы сделать текст дальше от дна, состоит в том, чтобы установить
источник
Вы можете увидеть мой блог. Вы можете установить пользовательскую высоту Textblock из codebehind. Для установки пользовательской высоты вам нужно установить ее внутри рамки или стека
http://ciintelligence.blogspot.com/2011/02/wpf-textblock-vertical-alignment-with.html
источник
Я обнаружил, что должен был сделать это немного по-другому. Моя проблема заключалась в том, что если бы я изменил размер шрифта, текст в TextBox переместился бы вверх, а не остался внизу с остальными текстовыми полями на линии. Изменяя выравнивание вершин сверху вниз, я смог программно изменить шрифт с размера 20 до размера 14 и обратно, сохраняя гравитацию текста снизу и поддерживая чистоту. Вот как:
источник
Чтобы расширить ответ, предоставленный @Orion Edwards, это то, как вы бы поступили полностью из кода (без установленных стилей). В основном создайте пользовательский класс, который наследует от Border, для которого Child имеет значение TextBox. В приведенном ниже примере предполагается, что вам нужна только одна строка, а граница является дочерним элементом Canvas. Также предполагается, что вам необходимо настроить свойство MaxLength элемента TextBox на основе ширины границы. В приведенном ниже примере также устанавливается курсор на границе для имитации текстового поля, устанавливая для него тип «IBeam». Поле '3' устанавливается так, чтобы TextBox не был абсолютно выровнен по левому краю.
Класс:
источник
Я думаю, что лучше использовать Label (или TextBlock) в Label, вы не можете прикрепить событие мыши непосредственно в элементе управления границей, наконец, оно присоединено в TextBlock, это мое рекомендация:
источник
Я думаю, что было бы разумно использовать текстовое поле без рамки и фона в качестве простого и быстрого способа достичь центрированного текстового блока
источник
источник
TextBlock
неTextBox
. -1