62 votes

Redimensionnement de la police d'un bloc de texte WPF pour remplir l'espace disponible dans une grille

J'ai du texte qui est affiché au moment de l'exécution dans un bloc de texte. Je veux que la taille de la police soit la plus grande possible pour remplir la zone qui est donnée. Je pense avoir correctement configuré le bloc de texte pour qu'il soit "autosize" et J'essaie d'augmenter la taille de la police jusqu'à ce que le bloc de texte soit plus grand que son parent. que son parent, puis je diminue la taille de la police de 1. Le problème est que je n'arrive pas à faire en sorte que le contrôle redessine/recompense sa taille.

Y a-t-il un meilleur moyen de le faire ? Ou y a-t-il un moyen de faire fonctionner ma méthode ?

87voto

Jobi Joy Points 20883

Enveloppez le TextBlock à l'intérieur d'un ViewBox :

   <Grid>
    <Viewbox>
        <TextBlock TextWrapping="Wrap" Text="Some Text" />
    </Viewbox>
   </Grid>

8 votes

Cela remplit tout l'espace horizontal... mais comment faire de même pour l'espace vertical ? Je ne peux pas envelopper le texte du bloc de texte jusqu'à ce qu'il ait une très petite taille de police.

0 votes

Le texte s'étire alors à la hauteur de la zone dans laquelle il se trouve, ce qui le rend ÉNORME. Et l'habillage n'a jamais donné de coup de pied, il a continué à couler sur le bord droit de mon contrôle.

6 votes

Downvoted, Textwrapping ne fonctionne pas avec viewbox à moins que la largeur du bloc de texte soit définie, ce qui va à l'encontre de l'idée même de viewbox.

40voto

J'ai eu le même problème. Vous pouvez utiliser ceci pour redimensionner el fontsize de la bloc de texte pour remplir la zone lorsqu'elle a débordement .


<Viewbox StretchDirection="DownOnly" Stretch="Uniform">
    <TextBlock Text="{Binding Path=Title}" HorizontalAlignment="Center"/>
</Viewbox>

5 votes

Wow, j'ai passé des heures à essayer de trouver une solution à un problème similaire en utilisant la méthode Measure et Width, ActualWidth, RenderWidth, mais rien ne fonctionnait ahahahahahahahah Je n'aurais jamais découvert la propriété "DownOnly", merci ! :)

2 votes

Vous pouvez changer la valeur Stretch en Fill si vous souhaitez que la police devienne plus étroite au lieu d'être plus petite.

12voto

Sajin Points 73

Le WPF ViewBox peut croître/rétrécir avec son contenu en fonction de l'espace disponible.

Il suffit de placer votre TextBlock dans un ViewBox comme ;

<Viewbox Stretch="Uniform" Width="50" Height="50">
    <TextBlock Text="Test" />
</Viewbox>

ViewBox est généralement mis à l'échelle par son conteneur.

11voto

Nate Zaugg Points 1969

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>

3voto

Will Points 76760

Bon, 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>

El ViewBox élargira tout contenu pour remplir son conteneur. Le problème est que le TextBlock Bien qu'il s'adapte à son texte, il comporte un remplissage en haut et en bas dont vous ne pouvez pas vous débarrasser (sans faire de gros efforts). Cela pourrait vous rapprocher de ce que vous voulez, cependant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X