在WPF中使用LayoutRounding和High DPI

时间:2014-03-14 13:57:34

标签: wpf dpi

我们的WPF应用程序,使用.NET 4.5,默认情况下在每个窗口的根级别启用UseLayoutRounding。在Windows 7和Windows 8上,我们的应用程序在100%和125%DPI设置下看起来很不错。但是,一旦我们将其提高到150%,我们就开始在整个产品中出现双厚边框线问题。如果我们将UseLayoutRounding关闭150%,突然控制和边框看起来好多了。我们正在调查是否可以根据DPI动态设置此设置。

我想要了解的是显示器的物理DPI如何发挥作用。我能指望一台高于普通DPI的1080p显示器不会出现这种问题吗?如果我在启用了200%DPI缩放功能的Surface Pro上运行我的应用程序(我们很遗憾没有),我会看到相同的问题吗?

我想让我感到困惑的是,UseLayoutRounding完全符合我们的要求,当它将相邻的边框和形状排列在100%和125%时,但是相反的情况是150%。有没有人有任何见解?

1 个答案:

答案 0 :(得分:4)

WPF在高DPI上发布了修复Visuals中的剪辑。为了在针对TFV的应用上获得此行为< 4.6,您需要在app.config文件的运行时部分添加以下内容:

<AppContextSwitchOverrides value="Switch.MS.Internal.DoNotApplyLayoutRoundingToMarginsAndBorderThickness=false;" />

注意:这仅适用于安装了至少.NET 4.6的计算机。如果您的应用程序的目标是框架版本&gt; = 4.6,那么您甚至不需要放置此开关,并且默认情况下应该获得良好的行为。