wpf的像素单位是1/96*系统dpi。当前系统dpi是96,那么wpf的一个单位长就是1px像素。这个系统dpi的意思就是物理单位一英寸里有多少个像素点,比如windows标准的96dpi,意味着一英寸有96个像素。则每个像素大小是1/96(英寸)。计算dpi的方法是(根号下(分辨率横向平方+分辨率纵向平方))/显示屏对角线尺寸(英寸位单位),比如27寸的2k显示器,dpi的计算就等于(根号下(2560*2560)+(1440*1440))/27。这个分辨率就是显示器横向2560个像素,纵向1440个像素。
  接下来,我们可以计算一个With=96的按钮在dpi等于96的系统上的按钮的物理英寸大小为96*(1/96*96)/96=1(英寸)。解释一下96*(1/96*96)表示这个按钮的长是多少像素,最后除以96表示除以的是dpi,得到的结果就是1英寸。比如一个dpi为192的系统,一个按钮长为96的按钮的像素值96*(1/96*192)=192px,192(px)/dpi192=1(英寸),虽然dpi增大了,一个长96的按钮的像素值是192px,但是它再除以192dpi,最终得到的结果还是物理尺寸1英寸。
  总的来讲,wpf的设备无关性,我的理解就是,无论系统的分辨率是多少,写按钮的Width=96,在这些不同的dpi的显示器上,这个按钮的物理尺寸长度的依然是1英寸。但是如果调整了dpi的倍数,比如120%dpi,那么按钮的物理尺寸就会相应的变长。
  在winform中,就会有这样的现象,应用在dpi为96的系统开发,然后放在dpi为85的系统C上,就会发现应用的系统的字体,控件长宽变宽了。这是因为本来a控件写Width=96,但是在C系统上,一英寸只需要85个像素,那么96/85>1英寸了,所以它看起来就变长了。同理,如果是放在dpi为192的系统M上,就会发现控件的长宽字体大小都缩小了一倍,就是因为96/192=0.5(英寸),它只有0.5英寸长了,缩小了一半。
这也是为什么windows会有放大dpi的功能,在120%放大,这个放大不是说dpi*1.2这样放大,而是放大的像素点的大小。那么放大后,相当与表示1英寸所需的像素点将会减少,因为像素点放大了,那么96标准dpi下的软件,在高dpi系统的120%倍放大效果下,它的物理尺寸就会被拉长,因为像素点的边大了,这样字体和控件大小更接近96dpi系统下的大小了。

wpf关于设备无关性的理解的更多相关文章

  1. 论wpf的设备无关性 - 简书

    原文:论wpf的设备无关性 - 简书 WPF从发布之日起,一直将“分辨率无关(resolution independence)”作为其亮点,声称使用WPF制作的用户界面在轻巧的Ultra-Mobile ...

  2. 2000条你应知的WPF小姿势 基础篇<78-81 Dialog/Location/WPF设备无关性>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000ThingsYou Should Know About C# 和 2,00 ...

  3. WPF 与设备无关的单位

    WPF从发布之日起,一直将“分辨率无关(resolution independence)”作为其亮点,声称使用WPF制作的用户界面在轻巧的Ultra-Mobile PC的屏幕上和在50英寸的电视机上都 ...

  4. WPF显示尺寸与设备无关问题

    WPF单位 WPF窗口以及其中的所有元素都是用与设备无关的单位进行度量.一个与设备无关的单位被定义为1/96英寸.WPF程序统一用下面一个公式来定义物理单位尺寸: [ 物理单位尺寸(像素)] = [ ...

  5. WPF概述(硬件加速及分辨率无关性)

    一.名词解释 WPF(Windows Presentation Foundation),直译为Windows表示基础,是专门用来编写程序表示层的技术和工具. 大部分程序都是多层架构的,一般至少包含三层 ...

  6. WPF 分辨率无关性原理

    WPF在计算窗口尺寸大小时使用的是系统的DPI设置.WPF窗口以及窗口中所有的元素都是使用设备无关单位度量.一个设备无关单位被定义为1/96英寸. [物理单位尺寸]=[设备无关单位尺寸]*[系统DPI ...

  7. Java的平台无关性

    转载自:http://www.cnblogs.com/Y/archive/2011/03/22/JavaVM_Learning_Chapter2_Platform_Independence.html ...

  8. Java是如何实现平台无关性的

    相信对于很多Java开发来说,在刚刚接触Java语言的时候,就听说过Java是一门跨平台的语言,Java是平台无关性的,这也是Java语言可以迅速崛起并风光无限的一个重要原因.那么,到底什么是平台无关 ...

  9. 【笨嘴拙舌WINDOWS】设备无关图(*.bmp)

    设备无关图在windows上面就是一个扩展名为.bmp的文件.我们知道每一种文件都是一个二进制流,只是这个二进制流的开头几个字节是规定了文件的格式..bmp的文件格式如下 “其中信息头是windows ...

  10. 深入Java虚拟机读书笔记第二章平台无关性

    Java的体系结构对平台无关的支持 Java平台 Java的体系结构通过几种途径支持Java程序的平台无关性,其中主要是通过Java平台自己.Java平台扮演一个运行时Java程序与其下的硬件和操作系 ...

随机推荐

  1. [.NET] 使用客户端缓存提高API性能

    使用客户端缓存提高API性能 摘要 在现代应用程序中,性能始终是一个关键的考虑因素.无论是提高响应速度,降低延迟,还是减轻服务器负载,开发者都在寻找各种方法来优化他们的API.在Web开发中,利用客户 ...

  2. 云辅助隐私集合求交(Server-Aided PSI)协议介绍:学习

    原文来自:云辅助隐私集合求交(Server-Aided PSI)协议介绍,下面学习一波,并记录一些笔记. 背景 总结: 1.PSI-CA和PSI相比,前者在乎的是交集的大小,后者在乎的是交集本身.另外 ...

  3. 在离线环境使用nuget包

    原来程序集的引用 一个项目所有功能我们不可能都自己写对吧.这个时代 引用一大片的第三方包  项目源文件几百兆 ,有可能第三方包占了总体积99%.有可能我们自己写的代码不过几十行.想想我们原来的 老时代 ...

  4. 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!

    写在前面 最近,DeepSeek 发布的推理大模型 DeepSeek - R1 ,可以说是AI大模型领域杀出的一匹黑马.它在国外大模型排名 Arena 上成绩惊人,基准测试位列全类别大模型第三,在风格 ...

  5. 提升质量:利用Coverage分析Python Web项目的测试覆盖

    提升质量:利用Coverage分析Python Web项目的测试覆盖 鉴于不同框架的运行机制各有差异,当利用Coverage工具对Python Web项目的测试覆盖率进行分析时,必须采取针对性的方法来 ...

  6. Nessus 扫描Web服务

    Nessus 扫描Web服务 1.点击 New Scan,选择 Web Application Tests 2.填写扫描名称和扫描目标 3.点击 Discovery ,选择 Scan Type 为全端 ...

  7. Q:ORACLE 之无法删除正在连接的用户?

    首先用户名必须用单引号引起来且必须大写,如下是失效的 1.查询用户进程 SELECT SID,SERIAL# FROM V$SESSION WHERE USERNAME='V7HIS_1'; 2.删除 ...

  8. ssh免密登录和代理连接线上服务器

    一.本地ssh配置 1.本地没有.ssh目录,第一次初始化ssh,一直回车键默认值 ssh-keygen -t rsa -P '' 2.设置目录权限 chmod 700 -R .ssh 设置目录权限 ...

  9. 使用iceberg-使用Iceberg数据湖需要注意的点

    一.资料准备 1.mysql地址选择 因为阿里云只读节点binlog保留时间短,需要用读写集群地址.可以登录阿里云控制台查看地址是只读还是读写,不清楚的话可以找dba要读写地址. 二.Iceberg概 ...

  10. Flink监控看板Dashboard解析

    一. 二.常见问题排查 1.数据反压 背压(Backpressure)机制排查 点击JobName 点击某个算子 点击Backpressure查看,状态为HIGH时,则存在数据反压问题 注:若流程为A ...