强制DPI在WPF中进行测试

强制DPI在WPF中进行测试,wpf,dpi,Wpf,Dpi,有没有办法欺骗WPF应用程序,使其认为它是在某个DPI上运行的 我想在不同的DPI级别(96120144192)测试我的程序,而不改变系统设置(需要在Windows7下注销/登录) 我可以手动设置1 DIU的大小吗?(96 DPI时,1 DIU=1像素。我想将1 DIU设置为1.25像素以模拟120 DPI。)如果您缩放转换最外部的容器,您可能可以执行您想要的操作。您只需要计算当前dpi和目标dpi之间的差值,并相应地设置刻度 另一个选项是使用类似的方法覆盖提供设备dpi的windows API

有没有办法欺骗WPF应用程序,使其认为它是在某个DPI上运行的

我想在不同的DPI级别(96120144192)测试我的程序,而不改变系统设置(需要在Windows7下注销/登录)


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

如果您缩放转换最外部的容器,您可能可以执行您想要的操作。您只需要计算当前dpi和目标dpi之间的差值,并相应地设置刻度


另一个选项是使用类似的方法覆盖提供设备dpi的windows API方法。不过,我怀疑您是否想去那里。

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

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

<Grid x:Name="LayoutRoot">
  <Grid.LayoutTransform>
    <TransformGroup>
      <ScaleTransform ScaleX="1.25" ScaleY="1.25"/>
    </TransformGroup>
  </Grid.LayoutTransform>

  <!-- Rest of your app here... -->    

</Grid>


我的应用程序中有一些位图图形,以96、120、144和192 DPI的4种不同大小呈现。我需要测试我的图像切换代码是否有效(我在WPF中没有发现任何自动执行此操作的代码)。我有一个备用的测试箱,但在VS中调试时使用它会很好。@madd0:为什么不需要呢?它被称为测试是有原因的。“你确定这个测试真的有必要吗?”Neat,从来没有听说过在
TransformGroup
之前不需要测试,因为它只包含一个转换。