如何防止 WPF 使用 Windows 字体大小选项进行缩放?

2024-03-10

我不希望我的 WPF GUI 根据 Windows 字体大小选项 (DPI) 进行缩放。这不仅仅是在 UserControl 上指定固定字体大小的问题,因为缩放会影响 UserControl 中的图像和边框。我可以在 UserControl 上设置一个属性来关闭缩放吗?如果没有,我该怎么做?


您可以根据当前的 DPI 设置缩小 UserControl。例如,如果您使用以下 DpiDecorator 包装 UserControl,则无论 DPI 设置如何,它看起来都应该相同:

public class DpiDecorator : Decorator {

    public DpiDecorator() {
        this.Loaded += (s, e) => {
            Matrix m = PresentationSource.FromVisual(this).CompositionTarget.TransformToDevice;
            ScaleTransform dpiTransform = new ScaleTransform(1 / m.M11, 1 / m.M22);
            if (dpiTransform.CanFreeze)
                dpiTransform.Freeze();
            this.LayoutTransform = dpiTransform;
        };
    }

}

或者您可以将该逻辑移至您的用户控件。

获取DPI比例因子的代码来自于此博客文章 https://learn.microsoft.com/en-us/archive/blogs/jaimer/getting-system-dpi-in-wpf-app.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何防止 WPF 使用 Windows 字体大小选项进行缩放? 的相关文章

随机推荐

  • 导入不带 .py 扩展名的 python 模块,[重复]

    这个问题在这里已经有答案了 我同意有类似的问题 但没有一个符合我的目的 我有一个 python 脚本 没有 py 扩展名 我既不能更改文件名也不能添加符号链接 文件名很重要 我需要将上述文件导入到另一个python脚本中 我尝试过以下方法
  • ActionSheet 的工具栏问题

    我有以下示例代码 import SwiftUI struct ContentView View var body some View NavigationView NavigationLink destination DetailViewT
  • Oracle 存储过程中记录错误消息

    我们计划使用 Oracle DBMS 调度程序包将存储过程配置为每天作为批处理作业运行 我们想知道发生错误时记录错误消息的最佳方法是什么 是否可以选择记录到临时表 或者有更好的选择 提前致谢 登录临时表可能是一个很好的解决方案 例如 您可以
  • 为什么我的 MVC 项目发布后无法运行?

    我最近将我的第一个 MVC 2 项目发布到运行 Windows 2008 的商业 Web 服务器 据称该项目可以毫无问题地支持其他 MVC 站点 但遇到了一些问题 这是该项目的高级结构 正如您所看到的 这非常简单 但是 在发布站点并导航到
  • 我是 .NET 新手 - 我应该关注什么,应该忽略什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 因此 我在使用 php 和 Coldfusion 编程数据库驱动的 Web 应用程序方面拥有相当多的经验 不是在一起 在不同的时间 并且我开始研
  • 可以强制执行类型提示吗?

    在 python 中使用 类型提示 表示法有什么好处吗 import sys def parse arg line int gt str print arg line passing a string returning None if n
  • 如何重新启动 Hibernate 处理的 PostgreSQL 序列?

    我的任务是重新启动 PostgreSQL 数据库中许多不同序列列的序列 通常 我会简单地使用 ALTER SEQUENCE serial RESTART WITH 105 然而 Hibernate 似乎被用来处理数据库序列 我真的对Hibe
  • 持久化和刷新 - Doctrine 和 MongoDB

    冲洗 有多快 我使用 persist 将数千个项目添加到集合中 然后清空集合 然后刷新它 dm this gt get doctrine odm mongodb document manager while stuff item new I
  • Mockito:是否可以将mock与方法名称结合起来在when()调用中创建methodCall?

    我在 StackOverflow 上的第一个问题 我希望能够做类似的事情 SomeClass 模拟 模拟 SomeClass class String 方法名 someMethod 或 方法 方法 someMethod 这两件事 模拟和方法
  • 如何在 Android NDK 中使用 Asio(独立于 Boost)?

    Asio 没有 Boost 应该只使用标题就可以使用 对吗 默认情况下 Asio 是一个仅包含头文件的库 http think async com http think async com 我知道Asio内部仍然依赖Boost 这是我的设置
  • 模块与包 Android Studio

    我对 Android Studio 和 Java 非常陌生 我正在开发一个应用程序 该应用程序基本上遵循分层架构 具有不同的层 例如 UI 数据访问层 服务层等 我不清楚包和模块之间的区别 我的问题是 将所有这些不同的层放在模块或包中的哪里
  • 在 React 中将状态从一个组件设置为另一个组件的最佳实践方法

    我从最佳实践的角度提出这个问题 我在这里找到的答案是关于单个代码库的更具体的问题 如果已经得到答案 我很高兴能被指出正确的方向 或者如果我正在尝试的内容不被认为是良好的做法 我很高兴能以另一种方式显示 我可能误解了一些概念 我正在学习 Re
  • 可以重载花括号吗?

    我几乎可以肯定不是 但我没有找到明确的答案 是否可以重载花括号 如 class Foo int i public int operator int i return i 42 int main Foo f f 2 return 0 它从未被
  • C++ 中的矩阵数据类型

    C 中有一种数据类型叫矩阵吗 如果是 使用它时应该包含哪个头文件 The 升压矩阵库 http www boost org doc libs 1 42 0 libs numeric ublas doc matrix htm提供了这个 对于更
  • 寻路代码产生意外结果

    首先 请原谅这个不好的标题 但我不知道如何用一句话来描述它 给定一个包含 3 种字段的网格 空字段 墙壁和出口 我编写了一个程序来检查每个空字段 该字段是否 安全 一个人穿过那个网格 但只能非对角线行走 不能穿过墙壁 这个人从一块田地开始
  • 如何使用 knex.js 按顺序链接查询?

    我在理解 Knex js 中的承诺如何工作时遇到一些困难 使用 Bluebird js 进行承诺 我正在尝试做一些非常简单的事情 按顺序依次执行不同的插入语句 但我无法让它工作 这是我到目前为止的代码 它的目的是在authenticatio
  • 应用程序启动后我可以收到 iOS 启动通知吗?

    我正在寻找一种在 iOS 上检索 UIApplicationLaunchOptionsLocalNotificationKey 的方法 该方法不涉及使用应用程序委托 即我不想实现以下内容 BOOL application UIApplica
  • 如何将自定义 CSS 与我的 Sharepoint WebPart 结合使用?

    ello 我正在为 Sharepoint 开发我的第一个 WebPart 现在我想知道在哪里 如何包含 存储我的 CSS 我应该将 css 文件放在哪里 我应该如何将它们包含在我的网络部件中 这是我的方法 protected overrid
  • 如何查找两个日期之间的持续时间

    我想找到两个日期列之间的持续时间 为此 我使用 DATEDIFF 函数分别查找年份和月份 但希望两个结果都在单列中 下面给出了两列 start dt end dt 06 Oct 2009 15 Jul 2011 需要的结果 Duration
  • 如何防止 WPF 使用 Windows 字体大小选项进行缩放?

    我不希望我的 WPF GUI 根据 Windows 字体大小选项 DPI 进行缩放 这不仅仅是在 UserControl 上指定固定字体大小的问题 因为缩放会影响 UserControl 中的图像和边框 我可以在 UserControl 上