2016-10-27 1 views
9

Lorsque j'essaie de générer le projet WPF avec .net framework 4.6.2, une erreur est survenue, car le format FormattedText() est obsolète comme ci-dessous: [Obsolète ("Utiliser le remplacement de PixelsPerDip", false)] public FormattedText (string textToFormat, CultureInfo culture, FlowDirection flowDirection, Typotype, double emSize, Brush foreground);Dans .NET Framework 4.6.2 le FormattedText() est obsolète, comment puis-je le corriger

La nouvelle méthode de remplacement est FormattedText publique (chaîne textToFormat, culture CultureInfo, FlowDirection flowDirection, police de caractères Typeface, double emSize, au premier plan brosse, double pixelsPerDip);

Q: Comment puis-je déterminer pixelsPerDip? Q: Comment puis-je utiliser l'ancien constructeur sans pixelsPerDip ?, car le pixelsPerDip est inutile pour mon projet.

Répondre

11

Vous devez calculer le DPI de votre moniteur, voir: How can I get the DPI in WPF?

En outre, avec .Net 4.6.2 viennent de nouvelles API pour gérer la prise de conscience DPI, de sorte que les méthodes ci-dessus pourraient être dépréciée (par exemple VisualTreeHelper .GetDpi()). Voir https://blogs.msdn.microsoft.com/dotnet/2016/08/02/announcing-net-framework-4-6-2/ Voici quelques exemples de code et un Userguide: https://github.com/Microsoft/WPF-Samples/tree/master/PerMonitorDPI

à mon humble avis ce pararameter a été ajouté afin que votre programme peut être déplacé entre les moniteurs avec différentes DPIs et est toujours mis à l'échelle correctement. De la déclaration FromattedText: pixelsPerDip: La valeur Pixels par densité de pixel indépendant, qui est l'équivalent du facteur d'échelle. Par exemple, si le DPI d'un écran est de 120 (ou 1,25 parce que 120/96 = 1,25), 1,25 pixel par pixel indépendant de la densité est dessiné. DIP est l'unité de mesure utilisée par WPF pour être indépendante de la résolution de l'appareil et des DPI.

Si vous avez seulement 1 moniteur et donc ne pas besoin de la gestion des événements a changé DPI, utilisez ce qui suit par exemple en cas onLoaded() de la fenêtre (ou dans votre constructeur):

var = pixelsPerDip VisualTreeHelper.GetDpi (this) .PixelsPerDip;

+0

Merci Leguanjoe –

+0

Merci Leguanjoe, mais mon projet ne peut pas changer les moniteurs, Alors savez-vous s'il y a une valeur par défaut que je peux définir? (par exemple "-1") ou quelque chose d'autre je peux utiliser ce constructeur sans DPI, merci d'avance –

+0

Je voudrais utiliser la méthode VisualTreeHelper, si vous ne voulez pas, je voudrais aller avec "1.0" de sorte que le fonction attend un moniteur avec 96 DPI. Je ne suis même pas sûr si cette valeur entre en jeu, quand vous n'utilisez qu'un seul écran. J'ai essayé "5" et toujours vu aucun changement dans la taille du FormattedText. – Leguanjoe