Unerwartete Änderungen des DPI -Bewusstseins nach Anwendungsaktualisierungen
Einige Anwendungen, die ursprünglich als DPI-Beobachtung konzipiert sind (die sich auf Windows 'UI-Skalierung verlassen), können nach geringfügigen Aktualisierungen unerwartet zu DPI-bewusstes DPI-bewusstes (Systembewusstsein) werden. Dies geschieht auch dann, wenn die Anwendungsmanifest- und externe Abhängigkeiten unverändert bleiben.
Grundursache:
Dieses Verhalten wird häufig durch DPI-bewusstes Drittanbieterkomponenten oder Abhängigkeiten verursacht. Selbst mit einer expliziten DPI-Bekanntmachungserklärung in das Anwendungsmanifest kann die Einbeziehung solcher Komponenten die Einstellung überschreiben, was die DPII-Wahrnehmung erzwingt.
Lösungen zur Definition von DPI -Bewusstsein:
Mehrere Ansätze können das DPI -Bewusstsein einer Anwendung explizit steuern:
1. Ändern des Anwendungsmanifests:
app.manifest
<code class="language-xml"><dpiaware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">false</dpiaware></code>
Der entsprechende API -Aufruf hängt von der Windows -Version ab:
<code class="language-csharp">[DllImport("user32.dll", SetLastError = true)] static extern bool SetProcessDPIAware();</code>
<code class="language-csharp">[DllImport("shcore.dll")] static extern int SetProcessDpiAwareness(ProcessDPIAwareness value); enum ProcessDPIAwareness { DPI_Unaware = 0, System_DPI_Aware = 1, Per_Monitor_DPI_Aware = 2 }</code>
<code class="language-csharp">[DllImport("user32.dll", SetLastError = true)] static extern int SetProcessDpiAwarenessContext(DpiAwarenessContext value); enum DpiAwarenessContext { Context_Unaware = (DPI_AWARENESS_CONTEXT)-1, Context_SystemAware = (DPI_AWARENESS_CONTEXT)-2, Context_PerMonitorAware = (DPI_AWARENESS_CONTEXT)-3, Context_PerMonitorAwareV2 = (DPI_AWARENESS_CONTEXT)-4 }</code>
: AssemblyInfo.cs
Fügen Sie dieses Attribut hinzu, um das systemdefinierte DPI-Bewusstsein basierend auf Komponentenreferenzen zu überschreiben:
<code class="language-csharp">[assembly: System.Windows.Media.DisableDpiAwareness]</code>
DPI-Bewusstsein ist threadspezifisch. Verwenden Sie threadspezifische API-Funktionen für die körnige Kontrolle über einzelne Threads.
Das obige ist der detaillierte Inhalt vonWarum wird meine DPI-Bewusstseinsanwendung nach einem Update plötzlich DPI-bewusst?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!