XAML и пробелы

Узнайте о правилах обработки пробелов, используемых XAML.

Обработка пробелов

В соответствии с XML символами пробелов в XAML являются пробелы, линии и вкладки. Они соответствуют значениям Юникода 0020, 000A и 0009 соответственно. По умолчанию эта нормализация пробелов возникает, когда обработчик XAML обнаруживает любой внутренний текст, найденный между элементами в XAML-файле:

  • Символы перевода строки между восточно-азиатскими символами удаляются.
  • Все символы пробелов (пробел, перевод строки, табуляция) преобразуются в пробелы.
  • Все последовательные пробелы удаляются и заменяется одним пробелом.
  • Пробел после открывающего тега удаляется.
  • Пробел перед закрывающим тегом удаляется.
  • Символы Восточной Азии определяются как набор символов Юникода от U+20000 до U+2FFFD и U+30000 до U+3FFFD. Это подмножество также иногда называется иеографами CJK. Дополнительные сведения см. в разделе http://www.unicode.org.

"Default" соответствует состоянию, обозначаемому значением атрибута XML: space по умолчанию.

Пробелы во внутреннем тексте и примитивы строк

Приведенные выше правила нормализации применяются к внутреннему тексту в элементах XAML. После нормализации обработчик XAML преобразует любой внутренний текст в соответствующий тип следующим образом:

  • Если тип свойства не является коллекцией, но не является напрямую типом объекта , обработчик XAML пытается преобразовать его в этот тип с помощью преобразователя типов. Сбой преобразования здесь приводит к ошибке синтаксического анализа XAML.
  • Если тип свойства является коллекцией, а внутренний текст является непрерывным (без тегов промежуточных элементов), внутренний текст анализируется как одна строка. Если тип коллекции не может принять String, это также приводит к ошибке средства синтаксического анализа XAML.
  • Если тип свойства — Object, внутренний текст анализируется как одна строка. Если существуют теги элементов, это приводит к ошибке средства синтаксического анализа XAML, так как тип объекта подразумевает один объект (String или в противном случае).
  • Если тип свойства является коллекцией, а внутренний текст не является непрерывным, то первая подстрока преобразуется в строку и добавляется в качестве элемента коллекции, промежуточный элемент добавляется как элемент коллекции и, наконец, в коллекцию добавляется конечная подстрока (если есть).

Пробелы и текстовые con режим палатки ls

На практике сохранение пробелов вызывает озабоченность только для подмножества всех возможных con режим палатки ls. Это подмножество состоит из con режим палатки ls, которые могут принимать однотонный тип String в какой-либо форме, выделенную коллекцию строк или смесь строк и других типов в списках, коллекциях или словарях.

Даже для моделей содержимого, которые могут принимать строки, поведение по умолчанию заключается в том, что любой оставшийся пробел не рассматривается как значащий.

Сохранение пробелов

Некоторые методы сохранения пробелов в исходном XAML для конечной презентации не влияют на нормализацию пробелов процессора XAML.

xml:space="preserve": укажите этот атрибут на уровне элемента, в котором необходимо сохранить пробелы. Обратите внимание, что это сохраняет все пробелы, включая пробелы, которые могут быть добавлены редакторами кода или поверхностями конструктора, чтобы выровнять элементы разметки как визуально интуитивно понятное вложение. Значение con режим палатки l для содержащего элемента снова выполняется отрисовка пространств. Мы не рекомендуем указывать xml:space="preserve" на корневом уровне, так как большинство объектных моделей не считают пробелы значительными как один или другой. Рекомендуется задавать атрибут только на уровне элементов, отображающих пробелы в пределах строки или представляющих коллекции значащих пробелов.

Сущности и неразрывные пробелы: XAML поддерживает размещение любой сущности Юникода в текстовой объектной модели. Вы можете использовать выделенные сущности, такие как неразрывное пространство (в кодировке UTF-8). Можно также использовать элементы управления форматированным текстом, поддерживающие неразрывные пробелы. Будьте осторожны, если сущности используются для имитации характеристик макета, таких как отступы, так как выходные данные времени выполнения сущностей зависят от большего количества факторов, чем общие объекты макета, такие как правильное использование панелей и полей.