在 WPF 中获取 Windows 10 文本缩放值

Posted

技术标签:

【中文标题】在 WPF 中获取 Windows 10 文本缩放值【英文标题】:Get Windows 10 Text Scaling value in WPF 【发布时间】:2021-10-20 05:46:00 【问题描述】:

如何在 WPF 中以编程方式检索 Windows 的 文本缩放值

【问题讨论】:

为什么需要得到它? WPF 不应该为您处理它吗? ***.com/questions/9373260/… 我需要这个值 @gunr2171,我相信它在 UWP 中是可能的,不幸的是我需要它用于 WPF,但我找不到获得它的方法。 【参考方案1】:

根据您的目标是 .NET 5 还是更早版本,您应该将 TargetFramework 设置为 net5.0-windows10.0.* 或将 Microsoft.Windows.SDK.Contracts NuGet 包安装为描述了here。

然后您可以使用Windows.UI.ViewManagement.UISettings.TextScaleFactor 属性:

double factor = new UISettings().TextScaleFactor;

【讨论】:

我正在使用.NET Framework 4.7.2,我已经安装了Microsoft.Windows.SDK.Contracts,但不包括Windows.UI.ViewManagement命名空间(仅Windows.UI.Xaml 它没有,在Microsoft.Windows.SDK.Contracts.targets 中有一个错误说必须使用PackageReference。这是关于向我的项目添加 nuget 包的引用吗? Microsoft.Windows.SDK.Contracts.targets 文件的内容。 <?xml version="1.0" encoding="utf-8"?> <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Target Name="PackageReferenceCheck" BeforeTargets="Build"> <Error Text="Must use PackageReference" Condition="'@(PackageReference)' == ''" /> </Target> </Project>这就是我得到的全部 您是否更改了.csproj 文件的格式? 好的,这里有链接!【参考方案2】:

我找到了一种无需安装任何 Nuget 包即可检索 文本缩放因子 的方法。这个想法是直接从注册表中获取值。

var userKey = Microsoft.Win32.Registry.CurrentUser;
var softKey = userKey.OpenSubKey("Software");
var micKey = softKey.OpenSubKey("Microsoft");
var accKey = micKey.OpenSubKey("Accessibility");

var factor = accKey.GetValue("TextScaleFactor");`

【讨论】:

以上是关于在 WPF 中获取 Windows 10 文本缩放值的主要内容,如果未能解决你的问题,请参考以下文章

WPF Paragraph获取或修改文本内容

从 Windows 10 虚拟键盘输入到 WPF 文本框中的快乐表情符号未在文本框的 PreviewTextInput 事件中捕获

使用 WPF 做个 PowerPoint 系列 文本 BodyProperties 的 FontScale 与文本字号缩放

WPF 中Canvas图形移动缩放代码

尝试在 Windows 10 高 DPI 显示器上解决模糊的 tkinter 文本 + 缩放,但担心我的方法不是 Pythonic 或不安全

呈现之前的 WPF 文本框高度