如何在WPF中的对话单位中指定单位?

时间:2011-08-22 12:49:35

标签: wpf user-interface user-experience

我正试图弄清楚如何使用适当的对话框单元(DLU)在WPF中布局一个简单的对话框。

我想出了一个简单的 r 示例,它可以直接解决问题:

enter image description here

您可以查看Windows UX Guidelines以查看这些测量的来源 简短版本是:

  • dlu = 对话框
  • dlu基于字体大小(项目随用户的字体大小而变化
  • 水平 dlu与垂直 dlu不同( dlu不是方形

这来自对话框单元的定义:平均字符是8dlus高4dlus宽

格鲁吉亚14pt:

enter image description here

如果你使用较小的字体(即8pt Tahoma和14pt Georgia),那么dlus会变小:

Segoe UI 9pt:

enter image description here

注意:您会注意到分辨率(即dpi)对讨论没有影响。

1 个答案:

答案 0 :(得分:2)

你可以尝试创建一个Converter,它返回的值乘以你的DLU

例如,我创建了一个MathConverter(代码为here),可让您指定类似

的内容
<Button Height="{Binding Source={x:Static local:Settings.VerticalDLU,
            Converter={StaticResource MathConverter},
            ConverterParameter=@VALUE*14}"

        Width="{Binding Source={x:Static local:Settings.HorizontalDLU,
            Converter={StaticResource MathConverter},
            ConverterParameter=@VALUE*50}" />

为了便于编写和读取,您可以创建一个继承自Binding并设置默认绑定属性的类,所以您只需要做的就是

<Button Height="{local:MyVDluBinding Source=14}"
        Width="{local:MyHDluBinding Source=50}" />

我从未尝试使用ConverterConverterParameter的默认值覆盖绑定,但我已覆盖绑定以进行验证,因此我认为这是可能的。

我创建的ValidationBinding可以像Text="{local:ValidationBinding MyProperty}"一样使用,并在绑定中自动设置ValidatesOnDataError=True, ValidatesOnException=True, UpdateSourceTarget=PropertyChanged