Est-il possible d'afficher le texte dans un TextBlock verticalement de manière à ce que toutes les lettres soient empilées les unes sur les autres (sans rotation avec LayoutTransform)?
Réponses
Trop de publicités?Personne n'a encore mentionné l'évident et banal façon d'empiler les lettres d'une chaîne de caractères arbitraire verticalement (sans rotation) à l'aide de pure XAML:
<ItemsControl
ItemsSource="Text goes here, or you could use a binding to a string" />
Il suffit de énonce le texte verticalement, en reconnaissant le fait que la chaîne est un IEnumerable et donc ItemsControl peut traiter chaque caractère de la chaîne comme un élément distinct. Le panneau par défaut pour ItemsControl est un StackPanel, de sorte que les caractères sont disposés verticalement.
Remarque: Pour un contrôle précis de la position horizontale, à la verticale de l'espacement, etc, le ItemContainerStyle et ItemTemplate propriétés peuvent être définies sur la ItemsControl.
Juste au cas où quelqu'un rencontrerait encore ce message ... voici une solution simple à 100% xaml.
<TabControl TabStripPlacement="Left">
<TabItem Header="Tab 1">
<TabItem.LayoutTransform>
<RotateTransform Angle="-90"></RotateTransform>
</TabItem.LayoutTransform>
<TextBlock> Some Text for tab 1</TextBlock>
</TabItem>
<TabItem Header="Tab 2">
<TabItem.LayoutTransform>
<RotateTransform Angle="-90"></RotateTransform>
</TabItem.LayoutTransform>
<TextBlock> Some Text for tab 2</TextBlock>
</TabItem>
</TabControl>
Je ne pense pas qu'il soit facile de le faire sans changer la manière dont le système affiche le texte de manière inhérente. La solution la plus simple serait de changer la largeur du bloc de texte et de fournir quelques propriétés supplémentaires comme celle-ci:
<TextBlock TextAlignment="Center" FontSize="14" FontWeight="Bold" Width="10" TextWrapping="Wrap">THIS IS A TEST</TextBlock>
C'est hacky, mais ça marche.
Il suffit d'utiliser un simple LayoutTransform ..
<Label Grid.Column="0" Content="Your Text Here" HorizontalContentAlignment="Center">
<Label.LayoutTransform>
<TransformGroup>
<RotateTransform Angle="90" />
<ScaleTransform ScaleX="-1" ScaleY="-1"/>
</TransformGroup>
</Label.LayoutTransform>
</Label>
C'est faisable:
Votre propriété TextBlock
's TextAlignment
doit être définie sur Center
:
<TextBlock Name="textBlock1" TextAlignment="Center" Text="Stacked!" />
Ajoutez ensuite NewLine
s entre chaque caractère:
textBlock1.Text =
String.Join(
Environment.NewLine,
textBlock1.Text.Select(c => new String(c, 1)).ToArray());
(Utilise System.Linq
pour créer un tableau de chaînes à partir des caractères individuels de la chaîne d'origine. Je suis sûr qu'il existe d'autres moyens de le faire ...)