Comment attribuer un alignement central vertical au texte à l'intérieur d'un TextBlock? J'ai trouvé la propriété TextAlignment mais c'est pour l'alignement horizontal du texte. Comment le faire pour l'alignement vertical du texte?
wpf
vertical-alignment
textblock
Fourmi
la source
la source
TextAlignment
n'affecte que l'alignement horizontal, pas l' alignement vertical (comme la question fait référence).Réponses:
Un bloc de texte lui-même ne peut pas faire d'alignement vertical
La meilleure façon de le faire que j'ai trouvée est de mettre le bloc de texte à l'intérieur d'une bordure, afin que la bordure fasse l'alignement pour vous.
Remarque: Ceci est fonctionnellement équivalent à l'utilisation d'une grille, cela dépend simplement de la façon dont vous souhaitez que les contrôles s'intègrent avec le reste de votre mise en page pour savoir lequel est le plus approprié
la source
Bien que Orion Edwards Answer fonctionne pour n'importe quelle situation, il peut être difficile d'ajouter la bordure et de définir les propriétés de la bordure à chaque fois que vous voulez faire cela. Un autre moyen rapide consiste à définir le remplissage du bloc de texte:
la source
Le TextBlock ne prend pas en charge l'alignement vertical du texte.
Je contourne cela en enveloppant le bloc de texte avec une grille et en définissant HorizontalAlignment = "Stretch" et VerticalAlignment = "Center".
Comme ça:
la source
TextBlock
à l'Ellipse
intérieur d' unGrid
. Pas besoin de lier mes propriétés de largeur et de hauteur ou de faire quelque chose de délicat.Vous pouvez utiliser une étiquette au lieu d'un bloc de texte.
la source
Si vous pouvez vous passer de l' habillage du texte , je pense que remplacer le TextBlock par une étiquette est la façon la plus succincte de le faire. Sinon, suivez l'une des autres réponses valides.
la source
TextBlock
ne prend pas en charge l'alignement vertical de son contenu. Si vous devez utiliserTextBlock
vous devez l'aligner par rapport à son parent.Cependant, si vous pouvez utiliser à la
Label
place (et ils ont des fonctionnalités très similaires), vous pouvez positionner le contenu du texte:Le
Label
va s'étirer pour remplir ses limites par défaut, ce qui signifie que le texte de l'étiquette sera centré.la source
Pour moi,
VerticalAlignment="Center"
résout ce problème.Cela peut être dû au fait que le
TextBlock
est enveloppé dans une grille, mais il en va de même pour pratiquement tout dans wpf.la source
J'ai trouvé que modifier le style de la zone de texte (c'est-à-dire:)
controltemplate
puis modifier l'PART_ContentHost
alignement vertical sur Centre fera l'affairela source
Juste pour rire, donnez à ce XAML un tourbillon. Ce n'est pas parfait car ce n'est pas un «alignement» mais il vous permet d'ajuster l'alignement du texte dans un paragraphe.
la source
Si vous pouvez ignorer la hauteur de TextBlock, il est préférable d'utiliser ceci:
la source
Dans mon cas, j'ai fait cela pour rendre l'
TextBlock
affichage plus agréable.L'astuce pour rendre le texte plus bas est de définir
la source
Vous pouvez voir mon article de blog. Vous pouvez définir la hauteur personnalisée de Textblock à partir de codebehind. Pour définir la hauteur personnalisée, vous devez la placer à l'intérieur dans une bordure ou un panneau de pile
http://ciintelligence.blogspot.com/2011/02/wpf-textblock-vertical-alignment-with.html
la source
J'ai trouvé que je devais le faire légèrement différent. Mon problème était que si je modifiais la taille de la police, le texte se déplacerait vers le haut dans la TextBox au lieu de rester en bas avec le reste des TextBox sur la ligne. En changeant l'alignement vert de haut en bas, j'ai pu changer la police par programme de la taille 20 à la taille 14 et arrière, en gardant la gravité du texte en bas et en gardant les choses propres. Voici comment:
la source
Pour développer la réponse fournie par @Orion Edwards, voici comment vous feriez complètement à partir de code-behind (aucun style défini). Fondamentalement, créez une classe personnalisée qui hérite de Border dont le Child est défini sur TextBox. L'exemple ci-dessous suppose que vous ne voulez qu'une seule ligne et que la bordure est un enfant d'un canevas. Suppose également que vous auriez besoin d'ajuster la propriété MaxLength de TextBox en fonction de la largeur de la bordure. L'exemple ci-dessous définit également le curseur de la bordure pour imiter une zone de texte en le définissant sur le type «IBeam». Une marge de «3» est définie de sorte que le TextBox n'est pas absolument aligné à gauche de la bordure.
Classe:
la source
Je pense qu'il vaut mieux utiliser un Label (ou TextBlock) dans un Label, vous ne pouvez pas attacher un événement de souris directement dans le contrôle de bordure, enfin il est attaché dans le TextBlock, voici ma recommandation:
la source
Je pense qu'il est sage d'utiliser une zone de texte sans bordure ni arrière-plan comme moyen facile et rapide d'atteindre un bloc de texte aligné au centre
la source
la source
TextBlock
nonTextBox
. -1