Как указать единицы в диалоговых единицах в WPF? - PullRequest
4 голосов
/ 22 августа 2011

Я пытаюсь понять, как создать простое диалоговое окно в WPF, используя соответствующие диалоговые единицы (DLU).

Я придумал простой r пример, который решает проблему:

enter image description here

Вы можете проверить Руководство по Windows UX , чтобы увидеть, откуда берутся эти измерения.
Короткая версия:

  • dlu = диалоговое окно
  • dlu зависит от размера шрифта ( элементы изменяются в зависимости от размера шрифта пользователя )
  • a по горизонтали dlu отличается от по вертикали dlu ( dlu's не квадратные )

Это происходит из определения диалоговой единицы: средний символ имеет высоту 8 dlus и ширину 4dlus .

Грузия 14pt:

enter image description here

Если вы используете шрифт меньшего размера (т. Е. Стихи Тахомы 8pt, 14pt Грузия), dlus становится меньше:

Segoe UI 9pt:

enter image description here

Примечание : Вы заметите, что разрешение (т.е. dpi) не влияет на обсуждение.

1 Ответ

2 голосов
/ 22 августа 2011

Вы можете попытаться создать 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 в привязках.

...