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. ctfshow--web13 .user.ini上传和bak源码泄露

    upload.php.bak源码泄露了 审计一下 点击查看代码 <?php header("content-type:text/html;charset=utf-8"); $ ...

  2. atomikos实现分布式事务

    date: 2022-04-25 categories: [java, 编程] tags: [分布式事务] 概述 多数据源单服务写入, 分布式事务实现 使用随机数控制产生异常 注: 网上很多都是只有多 ...

  3. 用 C# 写一个 .NET 垃圾回收器(二)

    用 C# 写一个 .NET 垃圾回收器(二) 在第一部分中,我们准备了项目,并修复了由 NativeAOT 工具链引起的初始化问题.在本部分,我们将开始实现自己的 GC(垃圾回收器).目前的目标是构建 ...

  4. Python无网络安装插件

    无网络安装插件 1.准备外网电脑,搭建所需python插件 2.将需要导出的插件,导出列表 pip freeze > .\req.txt 3.将插件导出到目录 pip download -r . ...

  5. oracle开启了审计功能,导致sysaux表空间满的问题

    查询是否开启审计功能 SQL> show parameter audit 如下图所示: AUDIT_TRAIL参数用于指定数据库审计跟踪信息的记录方式.它接受三个可能的参数:NONE,DB,OS ...

  6. linux监控系统行为

    1.验证电脑是否存在,一般都有 which script /usr/bin/script 2.配置profile文件,在末尾添加如下内容: vim /etc/profile ============= ...

  7. FishSpeech应用篇——专属朗读人

    背景 FishSpeech部署教程参见:使用FishSpeech进行语音合成推理 - 天命小猪 - 博客园 部署好之后,就能够基于推理来定制自己专属朗读人.编程能力强的小伙伴可以结合AI定制一个自己的 ...

  8. hbase - [05] hbase关联hive

    一.配置 1.在hive的配置文件中配置HBASE_HOME(conf/hive-env.sh) export HBASE_HOME=/opt/module/hbase 2.将 conf/hive-e ...

  9. SSM:Spring整合Mybatis时,连接池和SQLSessionFactory的联系!

  10. 初探本地DeepSeek VL + Typescript + FFMPEG:提取视频关键帧分析内容

    初探本地DeepSeek VL + Typescript + FFMPEG:提取视频关键帧分析内容 前言 随着人工智能和计算机视觉技术的发展,利用图像识别来分析视频内容已经成为现实.本文的主要目标是: ...