Comment calculer WPF TextBlock largeur pour son connu, la taille de la police de caractères?
Disons que j'ai TextBlock
avec le texte "Texte" et taille de la police 10.0.
Comment je peux calculer approprié TextBlock
largeur?
- Ceci a été demandé avant, aussi, qui dépend de la police, ainsi.
- Aussi, vous pouvez juste obtenir la largeur réelle de
ActualWidth
. - À l'aide de TextRenderer devrait fonctionner pour WPF ainsi: stackoverflow.com/questions/721168/...
Vous devez vous connecter pour publier un commentaire.
Utiliser le
FormattedText
classe.J'ai fait une fonction d'aide dans mon code:
Il retourne indépendante de l'appareil de pixels qui peuvent être utilisés dans WPF mise en page.
Pour l'enregistrement...
Je suis en supposant que l'op er essaie de programically déterminer la largeur que le textBlock prendra place après avoir été ajouté à l'arborescence visuelle. OMI, une meilleure solution, alors formattedText (comment gérez-vous quelque chose comme textWrapping?) serait d'utiliser les Mesurer et de les disposer sur un échantillon TextBlock. par exemple,
La solution fournie a été adapté .Net Framework 4.5, cependant, avec Windows 10 DPI et le Cadre 4.6.x l'ajout de divers degrés de soutien, le constructeur utilisé pour mesurer texte est maintenant marqué
[Obsolete]
, ainsi que tous les constructeurs de cette méthode qui ne comprennent pas lepixelsPerDip
paramètre.Malheureusement, c'est un peu plus complexe, mais il en résultera une plus grande précision avec la nouvelle mise à l'échelle des capacités.
PixelsPerDip
Selon MSDN, cela représente:
Voici ma mise en œuvre de la réponse sélectionnée sur la base des orientations de la Microsoft WPF/-Échantillons GitHub avec DPI de sensibilisation.
Il y a plus de configuration requises pour complètement soutien DPI comme de Windows 10 Anniversaire (ci-dessous le code), je ne pouvais pas aller au travail, mais sans elle, cela fonctionne sur un seul moniteur avec mise à l'échelle configurée (et respecte l'échelle des changements). Le document Word ci-dessus repo est la source de cette information depuis mon application ne se lance pas une fois j'ai ajouté ces valeurs. Cet exemple de code de la même repo également servi comme un bon point de référence.
Autres Exigences
Conformément à la documentation de Microsoft/WPF-Échantillons, vous devez ajouter des paramètres à l'application du manifeste pour couvrir Windows 10 Anniversaire, la possibilité d'avoir différents paramètres PPP par affichage dans de multiples configurations moniteur. C'est un juste deviner que, sans ces paramètres, le OnDpiChanged événement pourrait ne pas être soulevée lors de la fenêtre est déplacée à partir d'un écran à l'autre avec des paramètres différents, ce qui rendrait votre mesures de continuer à s'appuyer sur la précédente
DpiScale
. L'application que je a été écrit l'a été pour moi, seul, et je n'ai pas ce genre de configuration je n'avais rien pour le test et quand j'ai suivi les conseils, j'ai fini avec une application qui ne serait pas démarrer en raison d'erreurs manifestes, j'ai donc abandonné, mais ce serait une bonne idée de vérifier que les ajuster votre manifeste de l'application contenir:Selon la documentation:
J'ai résolu ce problème en ajoutant un chemin de liaison à l'élément dans le backend code:
J'ai trouvé ceci pour être une bien meilleure solution que d'ajouter tous les frais généraux de l'références ci-dessus, comme FormattedText à mon code.
Après, j'ai été capable de faire cela:
d_width = MyText.ActualWidth;
sans liaison. Le problème, c'est quand leTextBlock
n'est pas dans l'arborescence visuelle encore.J'ai trouvé des méthodes qui fonctionnent très bien...
J'utilise celui-ci:
Trouvé pour vous: