- Messages
- 128
Использование универсальных и часто применяемых конвертеров могло бы значительно упростить написание XAML-кода, особенно в случаях, когда требуется скрывать различные элементы интерфейса. Ниже приведены примеры таких конвертеров.
Сейчас для этого приходится писать несколько DataTrigger для каждого типа, что избыточно.
В качестве параметра можно передавать:
Также возможно передавать массив перечислений через привязку:
Для большей гибкости можно добавить второй параметр, указывающий режим скрытия (Hidden или Collapsed). Например:
Однако во многих случаях требуется сохранять занимаемое пространство (Hidden).
Поэтому было бы полезно расширить конвертер, добавив параметр, позволяющий выбирать тип скрытия:
EnumToVisibilityConverter
Данный конвертер позволяет скрывать элементы UI, относящиеся к определённым значениям перечислений.Сейчас для этого приходится писать несколько DataTrigger для каждого типа, что избыточно.
В качестве параметра можно передавать:
- перечисления по имени:
Code:
ConverterParameter="Banana,Apple,Watermelon"
- или по числовым значениям:
Code:
ConverterParameter="0,5,7"
Code:
ConverterParameter="{Binding plugin.ArrayHidden}"
Code:
ConverterParameter="Banana,Apple,Watermelon|Hidden"
BoolToVisibilityConverter
Стандартный BooleanToVisibilityConverter всегда скрывает элементы через Collapsed и не поддерживает параметров.Однако во многих случаях требуется сохранять занимаемое пространство (Hidden).
Поэтому было бы полезно расширить конвертер, добавив параметр, позволяющий выбирать тип скрытия:
- по умолчанию — Collapsed,
- при необходимости — Hidden.
Особенности реализации
Создание подобных универсальных конвертеров средствами JS затруднено, так как:- конвертеры могут использоваться в разных документах;
- необходимо наличие базового плагина, регистрирующего их до применения;
- текущий API не позволяет реализовать полноценные конвертеры с параметрами.
- управлять типом скрытия элементов,
- сократить количество дублирующегося кода,
- избавиться от необходимости писать однотипные триггеры.
Last edited: