Как указать единицы в диалоговых единицах в WPF?
Я пытаюсь выяснить, как создать простой диалог в WPF, используя соответствующие диалоговые единицы (DLU).
я придумал простой пример, который решает проблему:
Вы можете проверить Руководство по Windows UX, чтобы увидеть, откуда берутся эти измерения.
Краткая версия:
- dlu =диалоговое окно
- dlu зависит от размера шрифта (элементы меняются в зависимости от размера шрифтапользователя)
- горизонтальный dlu отличается от вертикального dlu (dlu не являются квадратными)
Это происходит из определения диалоговой единицы: средний символ имеет высоту 8dlus и ширину 4dlus.
Грузия 14pt:
Если вы используете шрифт меньшего размера (например, стихи из стиха Tapt 10pt 14pt из Грузии), dlus становится меньше:
Segoe UI 9pt:
Примечание. Вы заметите, что разрешение (т.е. dpi) не влияет на обсуждение.
1 ответ
Вы можете попробовать создать Converter
который возвращает значение, умноженное на то, что ваш DLU
Например, я создал MathConverter
(код здесь), который позволит вам указать что-то вроде
<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
в привязках.