2009-10-18 11 views
1

J'essaye de faire une ligne d'astérisque verticalement avec le texte/les graphiques environnants plutôt qu'au-dessus.Comment faire un astérisque avec le texte environnant dans WPF?

Je pensais que l'application d'un BaselineOffset négatif serait la solution, mais cela semble n'avoir aucun effet.

est ici la documentation de la propriété TextBlock.BaselineOffset:

Propriété Valeur Type: System.Double

Le montant par lequel chaque ligne de texte est décalé par rapport à la ligne de base, dans le dispositif pixels indépendants. Double.NaN indique qu'un décalage de ligne de base optimal est automatiquement calculé à partir des caractéristiques de police actuelles. La valeur par défaut est Double.NaN.

Remarques

La ligne de base est la ligne horizontale imaginaire avec lequel la base de chaque caractère dans une> ligne de texte est aligné.

balisage Exemple:

<TextBlock 
    Name="ReadUnreadIndicator" 
    Grid.Column="0" 
    VerticalAlignment="Center" 
    FontWeight="Bold" 
    FontSize="24" 
    BaselineOffset="-10" 
    Text="*" /> 

Peu importe ce que je mets pour baselineoffset, l'astérisque apparaît toujours "superscript".

Questions:

  1. Pourquoi ne pas baselineoffset travailler pour moi? Est-ce que je l'utilise mal ou est-ce un bug dans le cadre? Comment est-ce que je peux déplacer l'astérisque vers le bas sans utiliser la marge (qui créerait l'espace au-dessus du TextBlock que je ne veux pas)?

Répondre

2

Voici ce que je fini par aller avec:

<TextBlock 
    Name="ReadUnreadIndicator" 
    Grid.Column="0" 
    Margin="0,5,0,-5" 
    FontSize="24" 
    FontWeight="Bold" 
    Text="*" /> 

Merci à @Gimalay pour & @ Martin l'aide.

6

Pour autant que je sais que la TextBlock.BaselineOffset ne touche que TextBlock dans un autre TextBlock:

<TextBlock>Some text <TextBlock BaseLineOffset="10" Text="*"/></TextBlock> 

Réglage BaseLineOffset vous permet de déplacer verticalement l'astérisque par rapport à « Certaines parties du texte ». Notez que le BaseLineOffset par défaut indiqué par Double.NaN est différent de 0 et vous avez probablement besoin d'un décalage positif pour éviter de déplacer l'astérisque trop bas. Mais comme vous l'avez indiqué dans votre commentaire en utilisant le BaseLineOffset n'est pas une bonne solution. Le problème semble être que le glyphe astérisque n'est pas placé à votre goût. Je suggérerais que vous passiez à votre propre glyphe dessiné dans WPF avec le placement approprié et regarde et placez cela à côté du texte en utilisant quelque chose comme un StackPanel pour les aligner.

+0

Merci, c'est certainement la bonne réponse à ma première question, mais cela finit par créer de l'espace supplémentaire, ce qui rend le TextBlock globalement plus grand. – devuxer

+0

Vous pouvez utiliser une marge comme "0,1,0, -1". – gimalay

+0

@Gimalay, c'est tout! – devuxer

0

Cela semble aligner correctement l'astérisque:

<TextBlock 
    Grid.Column="0"> 
    <TextBlock 
     Name="ReadUnreadIndicator" 
     BaselineOffset="30" 
     FontFamily="Courier New" 
     FontSize="24" 
     FontWeight="Bold" 
     Text="٭" /> 
</TextBlock> 

Le Text est en fait un « arabe Cinq Pointu Star » (U + 066D) au lieu d'un astérisque, mais il semble très similaire.

Je ne sais pas pourquoi le BaselineOffset doit être "30" pour fonctionner correctement. Il ne fait évidemment pas bouger le texte de 30 pixels - il le déplace peut-être de 2 ou 3 pixels.

+0

Dans votre cas, la valeur par défaut 'BaseLineOffset' est peut-être 33 et l'abaisser à 30 déplace légèrement l'astérisque vers le bas. La valeur par défaut 'BaseLineOffset' est calculée à partir de la police en définissant' BaseLineOffset' sur 'Double.NaN'. 0 n'est généralement pas la valeur "neutre" ou par défaut. –

+0

@ Martin, Cela expliquerait. Eh bien, presque. Une chose que j'ai remarquée: régler 'BaselineOffset' entre 0 et 25 et sans aucun effet. Même de très petits 'BaselineOffset 'négatifs ont eu un effet, cependant. Pouvez-vous expliquer pourquoi ce serait? – devuxer

Questions connexes