wpf 字符串 指定大小_如何计算WPF TextBlock的已知字体大小和字符宽度?
所提供的解决方案适用于.Net Framework 4.5,但是,随着Windows 10 DPI缩放和Framework 4.6.x添加对它的不同程度的支持,现在标记了用于测量文本的构造函数[Obsolete],以及该方法上的所有构造函数不包含pixelsPerDip参数。
不幸的是,它涉及的更多,但是新的缩放功能将导致更高的准确性。
每浸像素
根据MSDN,这表示:
每个密度独立像素的像素值,它等于比例因子。例如,如果屏幕的DPI是120(或1.25,因为120/96 = 1.25),则每个密度独立像素绘制1.25个像素。DIP是WPF用来独立于设备分辨率和DPI的度量单位。
这是我根据Microsoft / WPF-Samples GitHub存储库中具有DPI缩放感知的指导对所选答案的实现。
从Windows 10 Anniversary开始,还需要一些其他配置来完全支持DPI缩放(在代码下方),我无法使用它,但是如果没有它,它就只能在配置了缩放(并遵守缩放更改)的单个监视器上工作。上述回购中的Word文档就是该信息的来源,因为一旦添加这些值,我的应用程序将无法启动。 来自同一存储库的此示例代码也可以用作参考。
public partial class MainWindow : Window
{
private DpiScale m_dpiInfo;
private readonly object m_sync = new object();
public MainWindow()
{
InitializeComponent();
Loaded += OnLoaded;
}
private Size MeasureString(string candidate)
{
DpiInfo dpiInfo;
lock (m_dpiInfo)
dpiInfo = m_dpiInfo;
if (dpiInfo == null)
throw new InvalidOperationException("Window must be loaded before calling MeasureString");
var formattedText = new FormattedText(candidate, CultureInfo.CurrentUICulture,
FlowDirection.LeftToRight,
new Typeface(this.textBlock.FontFamily,
this.textBlock.FontStyle,
this.textBlock.FontWeight,
this.textBlock.FontStretch),
this.textBlock.FontSize,
Brushes.Black,
dpiInfo.PixelsPerDip);
return new Size(formattedText.Width, formattedText.Height);
}
// ... The Rest of Your Class ...
/*
* Event Handlers to get initial DPI information and to set new DPI information
* when the window moves to a new display or DPI settings get changed
*/
private void OnLoaded(object sender, RoutedEventArgs e)
{
lock (m_sync)
m_dpiInfo = VisualTreeHelper.GetDpi(this);
}
protected override void OnDpiChanged(DpiScale oldDpiScaleInfo, DpiScale newDpiScaleInfo)
{
lock (m_sync)
m_dpiInfo = newDpiScaleInfo;
// Probably also a good place to re-draw things that need to scale
}
}
其他需求
根据Microsoft / WPF-Samples上的文档,您需要在应用程序清单中添加一些设置,以涵盖Windows 10 Anniversary在多显示器配置中每个显示器具有不同DPI设置的能力。可以合理地猜想,如果没有这些设置,则当窗口从一个显示切换到另一个具有不同设置的显示时,可能不会引发OnDpiChanged事件,这将使您的测量继续依赖先前的DpiScale。我正在编写的应用程序是我一个人使用的,并且我没有那种设置,因此我没有什么可以测试的,而且当我按照指南进行操作时,由于出现清单错误,最终我的应用程序无法启动错误,所以我放弃了,但是最好仔细检查一下并调整您的应用清单以使其包含以下内容:
true
PerMonitor
根据文档:
[这两个]标签的组合具有以下效果:1)每个显示器的Windows NT 10周年更新2)系统
wpf 字符串 指定大小_如何计算WPF TextBlock的已知字体大小和字符宽度?相关推荐
- python怎么改变字体大小_如何在matplotlib图上更改字体大小
如果你像我这样的控制狂,你可能想要明确设置你所有的字体大小: import matplotlib.pyplot as plt SMALL_SIZE = 8 MEDIUM_SIZE = 10 BIGGE ...
- linux终端字体大小6,[adminitrative][archlinux][setfont] 设置console的字体大小
电脑的分辨率高了之后,用命令行进入的时候,完全看不清楚,是否容易导致眼瞎. 第一步便把字体调大就成了很必要的操作. 使用一个命令能马上生效: setfont 使用配置文件 /etc/vconsole. ...
- android 字体大小属于什么类型,聊聊 Android 中的字体大小适配
本篇文章已授权微信公众号 guolin_blog(郭霖)独家发布 前言 虽然去年写的一篇文章[一种非常好用的Android屏幕适配]就包含字体大小适配,但那篇文章讲的是根据不同屏幕尺寸来适配字体大小的 ...
- java jlabel 字体大小_java – 如何更改所有私有JLabel的字体大小
我见过类似的问题,例如this,但在我的情况下,我有25个私有JLabel,我在声明时给出了一个值.我在构造函数中使用GridBagLayout将这些JLabel添加到JPanel.如果我按照链接中给 ...
- css 所有字体大小,前端Web开发人员的CSS相对字体大小
在本文中,我们将看几种不同的方式,前端Web开发人员可以使用CSS操作其网页的字体. 网页设计中最大的混乱之一是由font-size属性造成的. 在CSS中,可以使用多个单元,这只会导致设计人员额外头 ...
- 字体大小的设置_老年人用智能手机,怎样更改字体大小?3种方法,手把手教您学会...
分享生活小妙招,共享科技新生活!大家好,欢迎来到今天的知识分享!我是你们的好朋友小俊! 我们的老年朋友在使用手机时候都会觉得字体太小,导致使用起来非常不方便,那么今天我就教大家三种方法来设置字体大小, ...
- java object大小_在Java中,确定对象object大小的最佳方法是什么? - Break易站
例如,假设我有一个应用程序,它可以读取包含一堆数据行的CSV文件.我根据数据类型向用户提供行数摘要,但是我想确保不读取太多数据行并导致OutOfMemoryErrors.每一行都会翻译成一个对象.有没 ...
- cad填充密度怎么调整_在CAD中一种查看字体大小、填充密度是否合适的方法
在CAD中一种查看字体大小.填充密度是否合适的方法对于CAD的新手来说字体大小和填充密度是比较不容易控制的,看到打印出来的图中的字体不是太大了就是太小了,填充的密度不是太密了就是太稀了,起不到应有的效 ...
- python colorbar长度_如何改变matplotlib色标colorbar的字体大小?
所以我们只能通过读源代码colorbar.py来寻找方法. 上图是colorbar.py文件的说明文档,从文档中我们可以看出,Figure.colorbar方法的实现依靠于make_axes函数和Co ...
最新文章
- Github配置(git+vscode+python+jupyter)
- 论流量平台(交易内容)生死劫——币看流量生意正在进入正循环
- python进程和线程_Python进程与线程知识
- IDEA中MAVEN项目打JAR包的简单方法
- boost::container实现扩展bwd测试分配器程序
- 什么都不说,来4波js
- 如何在React JS组件和React JS App中添加CSS样式?
- 关于如何在项目接口保证幂等性的一点思考
- java经典英文面试题,Java-英文面试题-经典
- Android Socket编程【转】http://duguyidao.iteye.com/blog/1069736
- Linux 中断总结
- 革命性新特性 | 单一应用跨多Kubernetes集群的部署与管理 1
- 系统目录 linux命令,Linux系统目录和命令介绍
- uniapp本地开发小程序代码超过2M,不能预览和真机调试解决办法
- Android 系统签名(.pk8、.pem) 制作成 storeFile
- 利用Echarts+阿里云地图选择器绘制可交互的行政区划地图
- 分享一款代码生成工具,可自定义模板生成不同的代码
- html5的header元素作用,html5header标签怎么用?html5header标签的作用介绍-
- Jenkins教程(2)插件源与常用插件
- 腾讯广告 广点通 数据上报 上传用户行为数据
热门文章
- Exchange安装与配置
- 彻底删除服务RabbitMQ
- 苹果公司注册成立 | 历史上的今天
- android piechart饼图内容,MPAndroidChart PieChart为什么只有在点击了饼图之后才会显示颜色?...
- DM8168芯片级资源(一)
- KOOM原理分析之一些基础知识
- Revit二次开发-【NO.03】外部命令(IExternalCommand)
- 什么是sessionFactory
- Android拦截短信的实现,英雄联盟手游新消息,安卓率先测试,ROG游戏手机5将提前上手?...
- android - 图片压缩,防止崩溃OOM