2011-02-24 7 views
1

Possible en double:
WPF 4: Grow/Shrink TextBlock (Font Size) based on available spacePolice de redimensionnement automatique dans WPF?

I ma recherche d'un comportements suivants dans WPF: Tous les TextBlock dans mon application sont présentées dans la taille 24 police, mais s'il n » t assez d'espace je voudrais diminuer une taille de police.

Je pensais que deux solutions, mais aucun d'entre eux travaillent:

  1. Mettez un textBox à l'intérieur négatoscope. Ne fonctionne pas, car toutes les étiquettes commencent à avoir des tailles différentes.
  2. Si ce serait un bouton, je spécifier un MinWidth au lieu de Width, mais il n'y a aucune propriété appelée MinFontSize sur le TextBlock. Edit:
  3. Créer un contrôle personnalisé avec la propriété MinTextWidth (cela pourrait fonctionner)

Toutes les autres solutions, qui fonctionnerait?

+0

Cela fonctionnerait-il de mettre tout le bloc de blocs de texte dans une grande vue? –

+0

Je suggère que plutôt que de réduire la taille de la police, suivez l'exemple des autres et raccourcissez les chaînes pour les adapter à l'ellipse. – Lazarus

+0

Hmm, je pense que ce ne sera pas le cas car il va s'assurer que tous les éléments sont mis à l'échelle plutôt que l'élément individuel change sa taille – Vitalij

Répondre

1

Je dirais que c'est un problème de conception, si l'utilisateur ne peut pas voir l'ensemble de l'élément, la réduction du texte ne sera probablement pas utile car elle peut le rendre illisible.

Vous devriez penser à faire quelque chose où le TextBlock se développe pour s'adapter au texte, ou utilisez un expandeur ou quelque chose pour leur permettre de voir le reste du texte.

+0

Oui si ce serait un texte plutôt qu'une valeur numérique. Le texte est numérique et est affiché sur la jauge et dans des situations normales devrait tenir dans l'espace disponible, mais dans certaines situations où l'entrée est en dehors de la plage, il est préférable de le montrer et de réduire la taille de la police texte. – Vitalij

0

Je pense qu'il n'y a pas de solution générique pour ce problème. Il y a une manière simple: la racine de disposition pour votre fenêtre est ViewBox. Une autre façon, à mon avis, est d'écrire un contrôle personnalisé et de changer dynamiquement ScaleTransform (pas FontSize - cela pourrait causer des problèmes de perfomance).

+0

Le problème de tout mettre dans une ViewBox est que tout le contenu sera mis à l'échelle de manière égale, plutôt que d'avoir une zone de texte individuelle diminuer sa taille, quand il n'y a pas assez d'espace. – Vitalij

+0

La création d'un contrôle personnalisé est une option, mais si vous modifiez ScaleTransform plutôt que la taille de la police, cela n'affectera pas la taille réelle de la zone de texte. – Vitalij

+1

@Vitalij: Ok, mais changez la taille de la police par étape, par exemple 12,13,14,15, ... N'utilisez pas de valeur double calculée, dans ce cas le processus PresentationFontCache peut consommer beaucoup de mémoire. –

Questions connexes