【问题标题】:Force DPI for testing in WPF强制 DPI 在 WPF 中进行测试
【发布时间】:2011-03-06 02:32:19
【问题描述】:

有什么方法可以让 WPF 应用程序认为它以特定 DPI 运行?

我想在不更改系统设置(在 Windows 7 下需要注销/登录)的情况下以各种 DPI 级别(96、120、144、192)测试我的程序。

我可以手动设置 1 DIU 的大小吗? (在 96 DPI 时,1 DIU = 1 像素。我想将 1 DIU 设置为 1.25 像素以模仿 120 DPI。)

【问题讨论】:

  • 我的应用程序中有一些位图图形,以 96、120、144 和 192 DPI 的 4 种不同尺寸呈现。我需要测试我的图像切换代码是否有效(我在 WPF 中没有找到自动执行此操作的任何内容)。我有一个备用的盒子来测试,但在 VS 中调试时这样做会很好。
  • @madd0:为什么没有必要?之所以称为测试是有原因的。
  • "你确定这个测试真的有必要吗?"不错,以前没听过这个

标签: wpf dpi


【解决方案1】:

如果你对最外层的容器进行 ScaleTransform,你也许可以做你想做的事。您只需要计算当前 dpi 和目标 dpi 之间的差异并相应地设置比例。

另一种选择是使用http://research.microsoft.com/en-us/projects/detours/ 之类的东西来覆盖提供设备dpi 的Windows API 方法。不过我怀疑你会想去那里。

【讨论】:

    【解决方案2】:

    正如上面的 Steven 所说,您可以应用顶级 ScaleTransform 来实现相同的效果,即在所有窗口上定义它。我在自己的应用程序中做类似的事情。如果您的应用程序没有很多不同的 Window 派生类,则此方法效果最佳,因为您必须修改每一个。例如。在 Window 的根布局项中定义如下内容。

    <Grid x:Name="LayoutRoot">
      <Grid.LayoutTransform>
        <TransformGroup>
          <ScaleTransform ScaleX="1.25" ScaleY="1.25"/>
        </TransformGroup>
      </Grid.LayoutTransform>
    
      <!-- Rest of your app here... -->    
    
    </Grid>
    

    【讨论】:

    • 不需要TransformGroup,因为它只包含一个转换。
    【解决方案3】:

    您可以使用 RenderTargetBitmap 将具有任何 DPI 的任何 Visual 渲染为任何大小,这可能对您的情况有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多