J'ai du texte qui s'affiche au moment de l'exécution dans un bloc de texte. Je veux que la taille de police soit la plus grande possible pour remplir la zone indiquée. Je pense avoir correctement configuré le bloc de texte pour "redimensionner automatiquement" et j'essaie d'augmenter la taille de la police jusqu'à ce que le bloc de texte soit plus grand que son parent, puis de diminuer la taille de la police de 1. Le problème est que je ne peux pas obtenir le contrôle pour redessiner/recalculer sa taille.
Est-ce la meilleure façon de le faire? Ou existe-t-il un moyen de faire fonctionner ma méthode?
Enveloppez le TextBlock
dans un ViewBox
:
<Grid>
<Viewbox>
<TextBlock TextWrapping="Wrap" Text="Some Text" />
</Viewbox>
</Grid>
J'ai eu le même problème. Vous pouvez l'utiliser pour redimensionner le taille de police du bloc de texte pour remplir la zone quand il a débordement.
<Viewbox StretchDirection="DownOnly" Stretch="Uniform">
<TextBlock Text="{Binding Path=Title}" HorizontalAlignment="Center"/>
</Viewbox>
J'ai trouvé un excellent moyen de le faire en utilisant ViewBox
:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="50" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<Viewbox Grid.Row="0" Grid.Column="0" Stretch="Uniform">
<TextBlock Name="tbTest" Background="Yellow" Text="This is some text" />
</Viewbox>
<ContentControl Grid.Column="0" Grid.Row="2">
<TextBlock>This is some text</TextBlock>
</ContentControl>
</Grid>
Le contrôle WPF ViewBox
peut augmenter/diminuer avec son contenu à l'espace disponible.
Placez simplement votre TextBlock
dans un ViewBox
as;
<Viewbox Stretch="Uniform" Width="50" Height="50">
<TextBlock Text="Test" />
</Viewbox>
ViewBox
est généralement mis à l'échelle par son conteneur.
Eh bien, ce n'est pas une réponse "parfaite", mais c'est un hack rapide (vous pouvez le déposer dans kaxaml et le tester):
<Page
xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml">
<Grid Height="300" Background="green">
<Viewbox>
<TextBlock Background="red" Text="Hurr"/>
</Viewbox>
</Grid>
</Page>
ViewBox
agrandira tout contenu pour remplir son conteneur. Le problème est que le TextBlock
, alors qu'il taille à son texte, a un rembourrage en haut et en bas dont vous ne pouvez pas vous débarrasser (sans faire de gros travaux). Cela pourrait vous rapprocher de ce que vous voulez, tho.
Pour garantir l'habillage, vous devez définir le MaxWidth
et/ou MaxHeight
du TextBlock
<Viewbox StretchDirection="DownOnly" Stretch="Uniform">
<TextBlock MaxWidth="500" TextWrapping="Wrap" FontSize="30" VerticalAlignment="Center"
Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."/>