Force DPI для тестирования в WPF

Есть ли способ обмануть приложение WPF, считая, что он работает с определенным DPI?

Я бы хотел протестировать свою программу на разных уровнях DPI (96, 120, 144, 192) без изменения системных настроек (что требует выхода из системы под Windows 7).

Можно ли вручную установить размер 1 DIU? (При 96 DPI, 1 DIU = 1 пиксель. Я хотел бы установить 1 DIU на 1,25 пикселя для имитации 120 DPI.)

Ответы

Ответ 1

Возможно, вы сможете делать то, что хотите, если вы ScaleTransform самый верхний контейнер. Вам просто нужно рассчитать разницу между текущим разрешением dpi и целевым разрешением и соответствующим образом установить масштаб.

Другой вариант - использовать что-то вроде http://research.microsoft.com/en-us/projects/detours/, чтобы переопределить методы API Windows, предоставляющие dpi. Я сомневаюсь, что вы захотите туда пойти.

Ответ 2

Как сказал Стивен выше, вы можете применить ScaleTransform верхнего уровня для достижения такого же эффекта, т.е. определить его во всех ваших окнах. Я делаю что-то подобное в своем приложении. Это лучше всего работает, если ваше приложение не имеет много разных классов, основанных на Windows, поскольку вам нужно изменить каждый из них. Например. в элементе корневого макета вашего окна определите что-то вроде следующего.

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

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

</Grid>

Ответ 3

Вы можете использовать RenderTargetBitmap для визуализации любого Visual с любым DPI до любого размера, который может быть полезен в вашей ситуации.