• ModernUI教程:独立显示器DPI感知


             独立显示器DPI感知,是在Windows 8.1中新增的特性,这个特性针对拥有多个显示器同时各个显示器的DPI设定又不同的人。对这个新特性做了优化支持的软件能够在一个高DPI的显示器移动窗口到另一个低DPI的显示器的时候实现完美自适应,反之亦然,自动适应对应的显示器的DPI。而对于不支持这个新特性的软件,哪怕是已经针对DPI调整做了优化的软件,系统都会利用DPI虚拟化来对软件界面进行像素拉伸放大或缩小(实际上放大与缩小采取了2种不同的方式,具体我就不说了),从而适应不同显示器的DPI。

    支持:

            在Windows 8.1之前,独立显示器DPI感知并不存在,操作系统提供了一个系统DPI,WPF自动支持。
            在1.0.6版本以后,当操作系统支持时,Modern UI将会自动启用独立显示器DPI感知功能。新基类DpiAwareWindow实现了所有扩展到当前显示器DPI设置所必需的功能。ModernWindow和ModernDialog都派生自DpiAwareWindow。

    要求:

    ModernUI应用程序支持独立显示器DPI感知有两个要求:
    1、显然主机操作系统必须是Windows 8.1或更高版本。如果ModernUI应用程序运行的操作系统不支持独立显示器DPI感知,它就会自动转切换到SystemDPI感知,这是WPF的默认设置。
    2、为了在进程中启用PerMonitorDpiAwareness,它必须被初始化为DPI unaware。这可以通过在你的应用程序中添加以下代码到AssemblyInfo.cs来实现:

    image

    DPI API:

    ModernUI公开的API可以用来查询当前的DPI设置。

    DpiAwareWindow

    DpiInformation属性
    公开当前的DPI settings.

    DpiChanged事件和OnDpiChanged方法
    当屏幕上的DPI 设置发生改变时被渲染。重写OnDpiChanged或处理DpiChanged事件来监视DPI的变化。例如你可以载入高/低DPI图像资源。

    ModernUIHelper
    包含辅助方法用于获取和设置当前进程的DPI感知。


    GetDpiAwereness方法
    查询当前进程的DPI挂不照顾。返回DpiUnaware,SystemDpiAware或PerMonitorDpiAware


    TrySetPerMonitorDpiAware方法
    试图设置DPI感知为PerMonitorDpiAware。当主机操作系统不支持PerMonitorDpiAware时,将采用SystemDpiAware。进程中最初的DPI感知必须成功设置为DpiUnaware。任何失败的操作都会被丢弃,返回值标识操作是否成功。
    该方法由DpiAwareWindow内部使用,不需要显式地调用这个方法。

    ModernUI的独立显示器DPI感知的实现很大程度上是基于MSDN上的文章:开发一个Per-Monitor DPI-Aware WPF应用程序

    传送门:ModernUI教程:目录

  • 相关阅读:
    方维分享系统模板修改,book_share_list.htm调用用户数据,$_FANWE['user']的数据
    方维分享系统修改会员的积分设置
    方维分享系统二次开发,tip.htm,修改调用的当前用户的信息
    方维分享系统模板修改,删除操作增加提示
    模拟器分辨率
    android自定义menu,PopUpWindow弹出菜单
    Android popupWindow响应back按键并关闭
    Android开发技巧:ViewStub惰性装载
    android动态全屏切换
    Android程序对不同手机屏幕分辨率自适应的总结
  • 原文地址:https://www.cnblogs.com/boyliupan/p/5374149.html
Copyright © 2020-2023  润新知