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 до любого размера, который может быть полезен в вашей ситуации.