Force DPI для тестирования в WPF - PullRequest
15 голосов
/ 06 марта 2011

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

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

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

Ответы [ 3 ]

4 голосов
/ 05 июня 2011

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

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

3 голосов
/ 20 июля 2011

Как сказал Стивен выше, вы можете применить 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>
1 голос
/ 18 июля 2011

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

...