Как указать единицы в диалоговых единицах в 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 в привязках.

Другие вопросы по тегам