应用程序更新后,
> 意外意识会发生变化
> 最初设计为DPi-Unaware(依赖Windows的UI缩放)的某些应用程序,可能会意外地成为DPI-Weaw(系统意识)之后的次要更新。 即使应用程序表现出来和外部依赖性保持不变,也会发生这种情况。> 根本原因:
>
这种行为通常是由DPI意识到的第三方组件或依赖项引起的。 即使在应用清单中有明确的DPI-Unaware声明,此类组件的包含也可以覆盖设置,迫使DPI-ISESTEMESS。
用于定义DPI意识的解决方案:
几种方法可以明确控制应用程序的DPI意识:
1。修改应用程序清单:
app.manifest
<code class="language-xml"><dpiaware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">false</dpiaware></code>
适当的API调用取决于Windows版本:
Windows 7:
<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
重要的考虑因素:
>
确保所有第三方组件和依赖项与所需的DPI意识水平一致。<code class="language-csharp">[assembly: System.Windows.Media.DisableDpiAwareness]</code>
以上是为什么我的DPI-Unaware应用程序在更新后突然变得DPI意见?的详细内容。更多信息请关注PHP中文网其他相关文章!