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

Syl*_*ain 11 wpf highdpi

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

Cod*_*ked 10

您可以根据当前的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;
        };
    }

}
Run Code Online (Sandbox Code Playgroud)

或者您可以将该逻辑移动到UserControl.

获取DPI比例因子的代码来自此博客文章.


Ter*_*mit 1

除了 DpiDecorator 之外,您还需要修复项目的字体大小。例如,在 Windows XP 中,如果您的设置设置为大字体,则菜单项字体大小设置为 14,并且还会使用 DPI 设置进行放大,因此如果您不修复 MenuItem 字体大小或任何其他 UI 项font,您将获得该项目类型的 Window 默认值。另请记住,用户可以手动更改其他项目的字体大小/字体...