Como atribuir alinhamento central vertical ao texto dentro de um TextBlock? Encontrei a propriedade TextAlignment, mas é para alinhamento horizontal de texto. Como faço para alinhamento vertical de texto?
wpf
vertical-alignment
textblock
Formiga
fonte
fonte
TextAlignment
afeta apenas o alinhamento horizontal, não o vertical (como a pergunta se refere).Respostas:
Um bloco de texto em si não pode fazer o alinhamento vertical
A melhor maneira de fazer isso é encontrar o bloco de texto dentro de uma borda, para que ela faça o alinhamento.
Nota: Isso é funcionalmente equivalente ao uso de uma grade, depende apenas de como você deseja que os controles se ajustem ao restante do layout e a qual deles é mais adequado
fonte
Embora o Orion Edwards Answer funcione em qualquer situação, pode ser difícil adicionar a borda e definir as propriedades da borda sempre que você desejar fazer isso. Outra maneira rápida é definir o preenchimento do bloco de texto:
fonte
O TextBlock não suporta alinhamento vertical de texto.
Eu trabalho em torno disso, envolvendo o bloco de texto com uma grade e definindo HorizontalAlignment = "Stretch" e VerticalAlignment = "Center".
Como isso:
fonte
TextBlock
-asEllipse
aGrid
. Não há necessidade de vincular minhas propriedades de largura e altura ou fazer algo complicado.Você pode usar o rótulo em vez do bloco de texto.
fonte
Se você pode ficar sem a quebra de texto , acho que substituir o TextBlock por um Label é a maneira mais sucinta de fazer isso. Caso contrário, siga uma das outras respostas válidas.
fonte
TextBlock
não suporta alinhamento vertical de seu conteúdo. Se você deve usarTextBlock
, você deve alinhá-lo em relação ao pai.No entanto, se você puder usar
Label
(e eles têm uma funcionalidade muito semelhante), poderá posicionar o conteúdo do texto:A
Label
extensão será esticada para preencher seus limites por padrão, o que significa que o texto do rótulo será centralizado.fonte
Para mim,
VerticalAlignment="Center"
corrige esse problema.Isso pode ser porque o
TextBlock
pacote está envolvido em uma grade, mas praticamente tudo está no wpf.fonte
Descobri que modificar o estilo da caixa de texto (por exemplo:)
controltemplate
e, em seguida, modificar oPART_ContentHost
alinhamento vertical para o Centro, fará o truquefonte
Apenas para rir, dê um giro neste XAML. Não é perfeito, pois não é um 'alinhamento', mas permite ajustar o alinhamento do texto dentro de um parágrafo.
fonte
Se você pode ignorar a altura do TextBlock, é melhor você usar isso:
fonte
No meu caso, fiz isso para tornar a
TextBlock
exibição mais agradável.O truque para tornar o texto mais distante da base é definir
fonte
Você pode ver minha postagem no blog. Você pode definir a altura personalizada do Textblock a partir do código-por trás. Para definir a altura personalizada, é necessário configurá-la dentro de uma borda ou painel de pilha
http://ciintelligence.blogspot.com/2011/02/wpf-textblock-vertical-alignment-with.html
fonte
Eu achei que tinha que fazer um pouco diferente. Meu problema era que, se eu alterasse o tamanho da fonte, o texto seria movido para cima na caixa de texto em vez de permanecer na parte inferior com o restante das caixas de texto na linha. Ao alterar o alinhamento vertical de cima para baixo, fui capaz de alterar programaticamente a fonte do tamanho 20 para o tamanho 14 e posterior, mantendo a gravidade do texto na parte inferior e mantendo as coisas organizadas. Aqui está como:
fonte
Para expandir a resposta fornecida pelo @Orion Edwards, é assim que você faria totalmente a partir do code-behind (nenhum estilo definido). Basicamente, crie uma classe personalizada que herda de Border com seu filho definido como TextBox. O exemplo abaixo pressupõe que você deseja apenas uma única linha e que a borda é filha de uma tela. Também assume que você precisaria ajustar a propriedade MaxLength do TextBox com base na largura da borda. O exemplo abaixo também define o cursor da borda para imitar uma caixa de texto, configurando-o para o tipo 'IBeam'. Uma margem de '3' é definida para que o TextBox não esteja absolutamente alinhado à esquerda da borda.
Classe:
fonte
Eu acho que é melhor usar um Label (ou TextBlock) em um Label, você não pode anexar um evento de mouse diretamente no controle de borda, finalmente ele está anexado no TextBlock, esta é minha recomendação:
fonte
Eu acho que é aconselhável usar uma caixa de texto sem borda e plano de fundo como uma maneira fácil e rápida de alcançar o bloco de texto alinhado ao centro
fonte
fonte
TextBlock
, nãoTextBox
. -1