2011-05-08 79 views
3

我创建了一个简单的Web浏览器WPF测试应用程序,画布中有图片和文本,窗口设置为96dpi。WPF高DPI问题

然后我切换到120 dpi和: - (((Display是杂乱,图象大小变更和画布的一部分超出视图...

当我使用的Winforms,我的AutoScaleMode属性设置为没有和窗户保持其大小,控件以及继承字体的控件正确显示,而不是模糊和不太大...

我该怎么做,以模仿W¨这种(良好)的行为? F?

回答

1

我不清楚你的意思是什么“网络浏览器WPF ...应用程序”。WPF不能在Web浏览器中运行,除非你在谈论X BAP。或者你在做Silverlight吗?或者它只是一个WPF导航应用程序,而不是基于浏览器?你需要澄清。

当您在高DPI模式下运行时,WPF会自动缩放您的内容。这是预期的行为:如果用户明确表示他们希望屏幕上的所有内容都更大,那么WPF将尊重用户的意愿。 “假装高DPI的旧WinForms黑客不存在,只是显示一切正常的小尺寸,并希望它不会让用户过多”在WPF中不可用;如果你在工作的话,你可能会模仿他们,但你非常强烈地指导着做正确的事情。

WPF尺度所有内容,所以您的声明“画布的一部分不在视图中”没有任何意义。它应该缩放画布,它的父窗口和它的子元素都相同,所以如果一切都适合96dpi,它也应该适合120dpi和144dpi。如果没有,那么你正在做一些奇怪的事情,你将不得不提供一个代码样本来重现问题。

您似乎声称在高DPI模式下运行时字体很模糊,这听起来很奇怪。字体呈现为矢量,所以它们应该干净地缩放,并且即使在高DPI模式下也能够清晰呈现。我从来没有见过你描述的模糊字体,所以你必须提供一个repro例子。

我期望模糊的唯一的事情就是图像。如果您在用户界面中使用光栅(位图)图像(BMP/GIF/JPG/PNG) - 例如,工具栏上的图标 - 那么是的,这些图像在缩放时会显得很糟糕。当你把一个小的位图放大时,它总是看起来很糟糕。您可以尝试通过使用更大的图像并调整大小以便显示来解决此问题 - 例如,如果您希望工具栏图像为16x16(当处于标准96 dpi模式下),那么您可以尝试将32x32位图放入您的项目,在你的XAML中设置图像元素的宽度=“16”和高度=“16”,并看看是否看起来更好。它实际上在120dpi模式下为20x20物理像素,在144dpi模式下为24x24,两者仍然会从32x32资源中缩小,因此比起不得不放大的16x16源图像有更好的拍摄效果。 (虽然我没有在WPF工具栏中尝试过这种技术,但我不知道它在实际工作中会如何使用典型的工具栏图像。)

解决缩放问题的最佳方法图像将使用矢量图像而不是光栅。不幸的是,很难找到矢量图像库。它们很少,通常不如您可以找到的位图图像全面,而且通常很昂贵。

+0

乔,我在说xbap。尽管我完全意识到所有内容都是根据WPF中的120或144 dpi重新绘制的。对不起,模糊的字体,你是真的,那些封装在位图图像中的字母......我的坏!也就是说,当您以96 dpi的分辨率绘制出适合整个屏幕的应用程序时,如果其他用户使用144 dpi,他几乎看不到您的应用程序。所以问题是:他是否必须使用滚动条或调整整个东西? – 2011-05-08 11:14:28

+0

因此,您正试图对XBAP进行硬编码,使其完全符合1024x768的屏幕?你正在进行一场艰苦的战斗。不同的用户将拥有不同的浏览器版本,其中不同的工具栏和其他Chrome会占用不同数量的垂直空间。他们将拥有不同的Windows设置(标题栏高度,任务栏高度,甚至任务栏停靠在显示器的哪一侧)。更不用说不同的屏幕分辨率和宽高比(例如宽屏宽屏不如高)。您最好使用WPF的布局功能来设计一个可以正常调整大小的UI。 – 2011-05-08 13:31:49

1

假设您使用固定长度单位(px)。尝试重新布局您的项目,并牢记WPF布局规则。 This页面有一些最佳做法。

1

我刚刚发现在.NET 4使用MaxHeight WPF下,一个bug在得到由另一个样式继承和用作StaticResource,这并没有得到由用户设置的DPI影响的样式设置。我将它从MaxHeight设置为Height,然后它受到了DPI的影响。我怀疑.NET 4(也可能是其他框架)中的一个错误。