我正试图弄清楚如何使用适当的对话框单元(DLU)在WPF中布局一个简单的对话框。
我想出了一个简单的 r 示例,它可以直接解决问题:
您可以查看Windows UX Guidelines以查看这些测量的来源 简短版本是:
这来自对话框单元的定义:平均字符是8dlus高4dlus宽。
格鲁吉亚14pt:
如果你使用较小的字体(即8pt Tahoma和14pt Georgia),那么dlus会变小:
Segoe UI 9pt:
注意:您会注意到分辨率(即dpi)对讨论没有影响。
答案 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}" />
我从未尝试使用Converter
和ConverterParameter
的默认值覆盖绑定,但我已覆盖绑定以进行验证,因此我认为这是可能的。
我创建的ValidationBinding
可以像Text="{local:ValidationBinding MyProperty}"
一样使用,并在绑定中自动设置ValidatesOnDataError=True, ValidatesOnException=True, UpdateSourceTarget=PropertyChanged
。