Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Языковые правила для состояния XAML, что значительное пробелы должны обрабатываться реализацией обработчика XAML. В этой статье описаны эти правила языка XAML. Он также документирует дополнительную обработку пробелов, определяемую реализацией обработчика XAML Presentation Foundation (WPF) и модуля записи XAML для сериализации.
Определение пробелов
В соответствии с XML символами пробелов в XAML являются пробелы, линии и вкладки. Они соответствуют значениям Юникода 0020, 000A и 0009 соответственно.
Нормализация пробелов
По умолчанию следующая нормализация пробелов возникает, когда обработчик XAML обрабатывает XAML-файл:
Линейные символы между символами Восточной Азии удаляются. Дополнительные сведения об определении этого термина см. в разделе "Символы Восточной Азии".
Все пробелы (пробелы, линии, вкладка) преобразуются в пробелы.
Все последовательные пробелы удаляются и заменяются одним пробелом.
Пространство сразу после тега запуска удаляется.
Пространство непосредственно перед удалением конечного тега.
Значение по умолчанию соответствует состоянию, которое обозначается значением по умолчанию атрибута xml:space.
Пробелы во внутреннем тексте и примитивы строк
Предыдущие правила нормализации применяются к внутреннему тексту, найденном в элементах XAML. После нормализации обработчик XAML преобразует любой внутренний текст в соответствующий тип следующим образом:
Если тип свойства не является коллекцией, но не является напрямую типом Object , обработчик XAML пытается преобразовать его в этот тип с помощью преобразователя типов. Сбой преобразования здесь приводит к ошибке во время компиляции.
Если тип свойства является коллекцией, а внутренний текст является непрерывным (без тегов промежуточных элементов), внутренний текст анализируется как один.String Если тип коллекции не может принять String, это также приводит к ошибке во время компиляции.
Если тип свойства имеет Objectтип, внутренний текст анализируется как один.String Если существуют теги элементов, это приводит к ошибке во время компиляции, так как Object тип подразумевает один объект (String или в противном случае).
Если тип свойства является коллекцией, а внутренний текст не связан, первая подстрока преобразуется в String элемент коллекции и добавляется String в качестве третьего элемента.
Сохранение пробелов
Существует несколько методов сохранения пробелов в исходном XAML для конечной презентации, которая не влияет на нормализацию пробелов процессора XAML.
xml:space="preserve": укажите этот атрибут на уровне элемента, в котором необходимо сохранить пробелы. Это сохраняет все пробелы, в том числе пробелы, которые могут быть добавлены приложениями редактирования кода для выравнивания элементов в виде визуального интуитивно понятного вложения. Однако, определяется ли эти пробелы моделью содержимого для содержащего элемента. Избегайте указания xml:space="preserve"
на корневом уровне, так как большинство объектных моделей не считают пробел значительным независимо от того, как задать атрибут. Настройка xml:space
глобально может иметь последствия для обработки XAML (особенно сериализации) в некоторых реализациях. Рекомендуется задать атрибут только на уровне элементов, которые отображают пробелы в строках или являются значительными коллекциями пробелов.
Сущности и неразрывные пробелы: XAML поддерживает размещение любой сущности Юникода в текстовой объектной модели. Вы можете использовать выделенные сущности, такие как неразрывное пространство ( в кодировке UTF-8). Кроме того, можно использовать элементы управления форматированным текстом, поддерживающие неразрывные пробелы. Если вы используете сущности для имитации характеристик макета, таких как отступ, следует будьте осторожны, так как выходные данные во время выполнения сущностей будут отличаться в зависимости от большего количества факторов, чем возможности для создания отступов приводят к типичной системе макета, например правильному использованию панелей и полей. Например, сущности сопоставляются с шрифтами и могут изменять размер в ответ на выбор пользовательского шрифта.
Восточноазиатские символы
"Восточноазиатские символы" определяются как набор символов Юникода от U+20000 до U+2FFFD и U+30000 до U+3FFFD. Это подмножество также иногда называется "Идографы CJK". Дополнительные сведения см. в разделе https://www.unicode.org.
Модели пробелов и текстового содержимого
На практике сохранение пробелов относится только к подмножествам всех возможных моделей содержимого. Это подмножество состоит из моделей контента, которые могут принимать одинтонный String тип в некоторой форме, выделенную String коллекцию или смесь String и другие типы в IList коллекции или ICollection<T> коллекции.
Модели пробелов и текстового содержимого в WPF
Для иллюстрации остальная часть этого раздела ссылается на определенные типы, определенные WPF. Функции обработки пробелов, описанные в этой статье, относятся как к службам XAML .NET, так и к WPF. Чтобы увидеть это поведение в действии, можно поэкспериментировать с некоторыми разметками XAML WPF, просмотреть результаты в графе объектов, а затем сериализовать обратно в разметку.
Даже для моделей содержимого, которые могут принимать строки, поведение по умолчанию в этих моделях содержимого заключается в том, что любое пустое пространство, которое остается, не рассматривается как значительное. Например, принимает ListBoxпробел , но пробел (например, IList линии между каждымListBoxItem) не сохраняется и не отображается. Если вы пытаетесь использовать линии в качестве разделителей между строками для ListBoxItem элементов, они не работают вообще; строки, разделенные линиями, обрабатываются как одна строка и один элемент.
Эти коллекции, которые обрабатывают пробелы как значительные, обычно являются частью модели документа потока. Основная коллекция, поддерживающая поведение сохранения пробелов, — это InlineCollection. Этот класс коллекции объявляется с WhitespaceSignificantCollectionAttributeпомощью атрибута. При обнаружении этого атрибута обработчик XAML будет обрабатывать пробелы в коллекции как значительные. Сочетание пробелов и пробелов xml:space="preserve"
в обозначенной WhitespaceSignificantCollectionAttribute коллекции заключается в том, что все пробелы сохраняются и отрисовывается. Сочетание пробелов и пробелов вызывает xml:space="default"
начальную нормализацию пробеловWhitespaceSignificantCollectionAttribute, описанную ранее, которая оставляет одно пространство в определенных позициях, и эти пробелы сохраняются и отрисовываются. Какое поведение является желательным, и вы должны использовать xml:space
выборочно, чтобы включить нужное поведение.
Кроме того, некоторые встроенные элементы, которые указывают на разрыв строки в модели документа потока, не должны намеренно вводить дополнительное пространство даже в значительной коллекции пробелов. Например, элемент имеет ту же цель, LineBreak что <и тег BR/> в HTML, а для удобства чтения в разметке обычно LineBreak отделяется от любого последующего текста с помощью созданного канала строк. Эта линия не должна быть нормализована, чтобы стать ведущим пространством в последующей строке. Чтобы включить это поведение, определение класса для LineBreak элемента применяет TrimSurroundingWhitespaceAttributeзначение, которое затем интерпретируется обработчиком XAML, чтобы означать, что пробелы вокруг LineBreak всегда обрезаются.
См. также
.NET Desktop feedback