XAML y espacio en blanco

Obtenga información sobre las reglas de procesamiento de espacios en blanco que usa XAML.

Procesamiento de espacios en blanco

En coherencia con XML, los caracteres de espacio en blanco en XAML son el espacio, el avance de línea y la tabulación. Estos corresponden a los valores Unicode 0020, 000A y 0009, respectivamente. De forma predeterminada, esta normalización de espacios en blanco se produce cuando un procesador XAML encuentra cualquier texto interno encontrado entre elementos de un archivo XAML:

  • Se quitan los caracteres de avance de línea entre los caracteres de Este de Asia.
  • Todos los caracteres de espacio en blanco (espacio, avance de línea, pestaña) se convierten en espacios.
  • Todos los espacios consecutivos se eliminan y reemplazan por un solo espacio.
  • Se elimina un espacio inmediatamente después de la etiqueta de inicio.
  • Espacio inmediatamente antes de eliminar la etiqueta final.
  • Los caracteres asiáticos orientales se definen como un conjunto de intervalos de caracteres Unicode U+2000 a U+2FFFD y U+30000 a U+3FFFD. Este subconjunto también se conoce a veces como ideógrafos de CJK. Para obtener más información, consulte http://www.unicode.org.

"Default" corresponde al estado indicado por el valor predeterminado del atributo xml:space .

Espacios en blanco en texto interno y primitivos de cadena

Las reglas de normalización anteriores se aplican al texto interno dentro de los elementos XAML. Después de la normalización, un procesador XAML convierte cualquier texto interno en un tipo adecuado como este:

  • Si el tipo de la propiedad no es una colección, pero no es directamente un tipo Object , el procesador XAML intenta convertir a ese tipo mediante su convertidor de tipos. Una conversión fallida aquí da como resultado un error de análisis XAML.
  • Si el tipo de la propiedad es una colección y el texto interno es contiguo (sin etiquetas de elemento intermedias), el texto interno se analiza como una sola cadena. Si el tipo de colección no puede aceptar String, esto también produce un error del analizador XAML.
  • Si el tipo de la propiedad es Object, el texto interno se analiza como una sola cadena. Si hay etiquetas de elemento intermedias, esto da como resultado un error del analizador XAML, ya que el tipo object implica un único objeto (String o de otro modo).
  • Si el tipo de la propiedad es una colección y el texto interno no es contiguo, la primera subcadena se convierte en una cadena y se agrega como un elemento de colección, el elemento intermedio se agrega como un elemento de colección y, por último, la subcadena final (si existe) se agrega a la colección como un tercer elemento String .

Modelos de contenido de texto y espacios en blanco

En la práctica, conservar el espacio en blanco solo es importante para un subconjunto de todos los modelos de contenido posibles. Ese subconjunto se compone de modelos de contenido que pueden admitir un tipo String singleton de alguna forma, una colección de tipos String dedicada o una colección de tipos String y otros tipos en listas, colecciones o diccionarios.

Incluso para los modelos de contenido que pueden tomar cadenas, el comportamiento predeterminado dentro de estos modelos de contenido es que cualquier espacio en blanco que permanezca no se trate como significativo.

Conservación del espacio en blanco

Varias técnicas para conservar el espacio en blanco en el XAML de origen para la presentación final no se ven afectadas por la normalización del espacio en blanco del procesador XAML.

xml:space="preserve": especifique este atributo en el nivel del elemento donde se debe conservar el espacio en blanco. Tenga en cuenta que esto conserva todos los espacios en blanco, incluidos los espacios que pueden agregar los editores de código o las superficies de diseño para alinear los elementos de marcado a modo de anidamiento visualmente intuitivo. Si la representación de esos espacios modelos viene nuevamente determinada por el modelo de contenido del elemento contenedor. No se recomienda especificar xml:space="preserve" en el nivel raíz, ya que la mayoría de los modelos de objetos no consideran que el espacio en blanco sea significativo de una u otra manera. Es recomendable establecer solo el atributo en el nivel de elementos que representan espacios en blanco dentro de cadenas o que son colecciones significativas de espacios en blanco.

Entidades y espacios sin separación: XAML admite la colocación de cualquier entidad Unicode dentro de un modelo de objetos de texto. Puede usar entidades dedicadas, como un espacio de no separación (en codificación UTF-8). También puede usar controles de texto enriquecido que sean compatibles con caracteres de espacio de no separación. Proceda con cuidado si usa entidades para simular características de diseño como sangrías, ya que la salida en tiempo de ejecución de las entidades varía en función de un mayor número de factores de los que serían las instalaciones de diseño generales, como el uso adecuado de paneles y márgenes.