我不希望我的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比例因子的代码来自此博客文章.
除了 DpiDecorator 之外,您还需要修复项目的字体大小。例如,在 Windows XP 中,如果您的设置设置为大字体,则菜单项字体大小设置为 14,并且还会使用 DPI 设置进行放大,因此如果您不修复 MenuItem 字体大小或任何其他 UI 项font,您将获得该项目类型的 Window 默认值。另请记住,用户可以手动更改其他项目的字体大小/字体...