在 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 文本缩放值的主要内容,如果未能解决你的问题,请参考以下文章
从 Windows 10 虚拟键盘输入到 WPF 文本框中的快乐表情符号未在文本框的 PreviewTextInput 事件中捕获
使用 WPF 做个 PowerPoint 系列 文本 BodyProperties 的 FontScale 与文本字号缩放
尝试在 Windows 10 高 DPI 显示器上解决模糊的 tkinter 文本 + 缩放,但担心我的方法不是 Pythonic 或不安全