2017-06-21 4 views
3

Y a-t-il un moyen de faire en sorte que l'application WPF obtienne la même taille à chaque échelle du système?WPF Application de la même taille à chaque échelle du système (indépendante de l'échelle)

Quand je change Modifier la taille du texte, des applications et d'autres éléments dans les fenêtres cadre du système de 125% (recommandé) à 100% dans un écran Full HD, mon application WPF est trop petite. Pour mettre en œuvre l'application à l'échelle du système indépendant, je l'ai écrit une fonction comme ceci pour changer l'échelle de mon application retour à 125%:

private void ScaleTo125Percents() 
{ 
    // Change scale of window content 
    MainContainer.LayoutTransform = new ScaleTransform(1.25, 1.25, 0, 0); 
    Width *= 1.25; 
    Height *= 1.25; 

    // Bring window center screen 
    var screenHeight = System.Windows.SystemParameters.PrimaryScreenHeight; 
    var screenWidth = System.Windows.SystemParameters.PrimaryScreenWidth; 
    Top = (screenHeight - Height)/2; 
    Left = (screenWidth - Width)/2; 
} 

Mais il y a des conditions pour appeler cette fonction. Premier de l'écran doit être Full-HD (Il existe des API pour vérifier cela) et aussi l'échelle du système doit être de 100% (Il n'y a pas d'API .NET pour obtenir l'échelle du système).

Que puis-je faire? Est-ce que je fais un moyen standard pour rendre mon système d'application indépendant?

Exemple d'échelle des applications indépendantes que j'ai vu:

  • Visual Studio 2017 Installer
  • Télégramme de bureau
+0

Vérifiez le conteneur de mise en page 'Viewbox': https://blog.udemy.com/wpf-viewbox/ –

+0

@BradleyUffner' changements Viewbox' mise à l'échelle des éléments par redimensionnement. Je veux une échelle statique basée sur les paramètres du système. Je ne pense pas que ça aide. – 0xaryan

+0

Je ne pense pas que je comprends parfaitement ce que vous demandez quand vous dites «échelle indépendante» alors. 'Viewbox' peut vous donner une toile d'une taille virtuelle spécifique. Tout ce qui y est placé s'affichera et sera disposé comme si la 'Viewbox' avait toujours la taille spécifiée, quelle que soit la taille de la fenêtre de l'application, ou la DPI du système. Peut-être qu'un dessin de la façon dont votre contenu se comporte à différentes tailles aiderait. –

Répondre

2

a finalement trouvé une réponse. Système obtenir la première échelle DPI en utilisant l'une des options suivantes:

  • Lire à partir du Registre AppliedDPI dword situé dans Computer\HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics. Ensuite, diviser par 96.
  • Ou utiliser cet extrait:

    double dpiFactor = System.Windows.PresentationSource.FromVisual(this).CompositionTarget.TransformToDevice.M11; 
    

    qui retourne une valeur comprise entre 1,0 2,5

Ensuite, créez un fichier de configuration qui contient les paramètres d'application et définissez dpiFactor comme échelle par défaut. Si l'utilisateur a préféré une échelle personnalisée, appelez cette fonction au démarrage de la fenêtre:

private void UserInterfaceCustomScale(double customScale) 
{ 
    // Change scale of window content 
    MainContainer.LayoutTransform = new ScaleTransform(customScale, customScale, 0, 0); 
    Width *= customScale; 
    Height *= customScale; 

    // Bring window center screen 
    var screenHeight = System.Windows.SystemParameters.PrimaryScreenHeight; 
    var screenWidth = System.Windows.SystemParameters.PrimaryScreenWidth; 
    Top = (screenHeight - Height)/2; 
    Left = (screenWidth - Width)/2; 
}