Traitement des espaces blancs en XAML

Selon les règles de language XAML, un espace blanc significatif doit être traité par une XAMLimplémentation du processeur . Cette rubrique documente ces règles de langage XAML. Elle traite également de la gestion supplémentaire de l'espace blanc définie par l'implémentation Windows Presentation Foundation (WPF) du processeur XAML et le writer XAML pour la sérialisation.

Cette rubrique comprend les sections suivantes.

  • Définition d'espaces blancs
  • Normalisation des espaces blancs
  • Espace blanc dans le texte interne et les valeurs de chaîne primitives
  • Conservation de l'espace blanc
  • Caractères d'Extrême-Orient
  • Espace blanc et modèles de contenu de texte
  • Rubriques connexes

Définition d'espaces blancs

Conformément au XML, les caractères d'espace blanc en XAML sont l'espace, le saut de ligne et la tabulation. Ils correspondent respectivement aux valeurs Unicode 0020, 000A et 0009.

Normalisation des espaces blancs

Par défaut, la normalisation d'espace blanc suivante se produit lorsqu'un processeur XAML traite un fichier XAML :

  1. Les caractères de saut de ligne entre les caractères d'Extrême-Orient sont supprimés. Reportez-vous à la section « Caractères d'Extrême-Orient » plus loin dans cette rubrique pour consulter une définition de ce terme.

  2. Tous les caractères d'espace blanc (espace, saut de ligne, tabulation) sont convertis en espaces.

  3. Tous les espaces consécutifs sont supprimés et remplacés par un espace.

  4. Un espace qui suit immédiatement la balise de début est supprimé.

  5. Un espace qui précède immédiatement la balise de fin est supprimé.

La « valeur par défaut » correspond à l'état désigné par la valeur par défaut de l'attribut xml:space.

Espace blanc dans le texte interne et les valeurs de chaîne primitives

Les règles de normalisation précédentes s'appliquent au texte interne que l'on trouve dans les éléments XAML. Après la normalisation, un processeur XAML convertit tout texte interne dans un type approprié comme suit :

  • Si le type de la propriété n'est pas une collection, mais n'est pas directement un type Object, le processeur XAML tente de convertir vers ce type à l'aide de son convertisseur de type. En cas d'échec de conversion, une erreur de compilation survient.

  • Si le type de la propriété est une collection et que le texte interne est contigu (aucune balise d'élément intermédiaire), le texte interne est analysé comme un String unique. Si le type de collection ne peut pas accepter String, une erreur de compilation est également générée.

  • Si le type de la propriété est Object, le texte interne est analysé comme un String unique. En cas de balises d'élément intermédiaires, une erreur de compilation est générée car le type Object implique un objet unique (String ou autre).

  • Si le type de la propriété est une collection et que le texte interne n'est pas contigu, la première sous-chaîne est convertie en String et ajoutée en tant qu'élément de collection, l'élément intermédiaire est ajouté en tant qu'élément de collection et la sous-chaîne de fin (le cas échéant) est ajoutée à la collection comme troisième élément String.

Conservation de l'espace blanc

Plusieurs techniques permettant de conserver l'espace blanc dans le code XAML source pour une présentation finale ne sont pas affectées par la normalisation des espaces blancs du processeur XAML.

xml:space="preserve" : Spécifiez cet attribut au niveau de l'élément où la conservation d'espace blanc est souhaitée. Cela permet de conserver l'ensemble de l'espace blanc, qui inclut les espaces pouvant être ajoutés par des applications d'édition de code pour imprimer correctement des éléments comme imbrication visuellement intuitive. Toutefois, le rendu de ces espaces est déterminé par le modèle de contenu pour l'élément conteneur. Évitez de spécifier xml:space="preserve" au niveau racine, car la plupart des modèles objet ne considèrent pas l'espace blanc comme significatif, quelle que soit la configuration choisie pour l'attribut. Le fait de définir xml:space de façon globale peut avoir des conséquences sur les performances de traitement XAML (la sérialisation, en particulier) dans certaines implémentations. Il est préférable de définir uniquement l'attribut spécifiquement au niveau des éléments qui rendent l'espace blanc dans des chaînes ou qui sont des collections significatives d'espaces blancs.

Entités et espaces insécables : le XAML prend en charge l'insertion d'une entité Unicode dans un modèle objet de texte. Vous pouvez utiliser des entités dédiées telles que des espaces insécables (  dans l'encodage UTF-8). Vous pouvez également utiliser des contrôles de texte enrichi que prennent en charge des caractères d'espace insécable. Soyez prudent lorsque vous utilisez des entités pour simuler des caractéristiques de mise en page (telles que la mise en retrait), car la sortie à l'exécution des entités variera selon un plus grand nombre de facteurs que les fonctionnalités de mise en page générales (telle que l'utilisation appropriée de panneaux et de marges). Par exemple, les entités sont mappées aux polices et peuvent changer de taille en fonction de la police sélectionnée par l'utilisateur.

Caractères d'Extrême-Orient

Les caractères d'Extrême-Orient sont définis comme un jeu de caractères Unicode allant de U+20000 à U+2FFFD et de U+30000 à U+3FFFD. Ce sous-ensemble est parfois appelé « idéogrammes CJK ». Pour plus d'informations, consultez http://www.unicode.org.

Espace blanc et modèles de contenu de texte

Dans la pratique, la conservation de l'espace blanc ne pose problème que pour un sous-ensemble de tous les modèles de contenu possibles. Ce sous-ensemble se compose des modèles de contenu qui peuvent prendre un type String singleton d'une certaine manière, une collection String dédiée ou un mélange de String et d'autres types dans une collection IList ou ICollection<T>.

Modèles avec espace blanc et contenu textuel dans WPF

À des fins d'illustration, le reste de cette section référence des types particuliers définis par WPF. Les fonctionnalités de gestion de l'espace blanc décrites dans cette rubrique s'appliquent généralement à la fois aux services XAML .NET Framework et à WPF. Pour voir ce comportement en action, il peut se révéler utile d'expérimenter des balises XAML WPF et de consulter les résultats dans un graphique d'objets, puis de procéder une nouvelle fois à une désérialisation en balises.

Même pour les modèles de contenu qui peuvent prendre des chaînes, le comportement par défaut de ces modèles de contenu est le suivant : tout espace blanc restant n'est pas traité comme significatif. Exemple : ListBox prend un élément IList, mais l'espace blanc (sauts de ligne entre chaque ListBoxItem, par exemple) n'est ni conservé, ni rendu. Si vous tentez d'utiliser des sauts de ligne comme séparateurs entre des chaînes pour les éléments ListBoxItem, cela ne fonctionne pas du tout ; les chaînes séparées par des sauts de ligne sont traitées comme une chaîne et un élément.

Ces collections qui traitent l'espace blanc comme significatif font en général partie du modèle de document dynamique. La principale collection qui prend en charge le comportement de conservation des espaces blancs est InlineCollection. Cette classe de collection est déclarée avec WhitespaceSignificantCollectionAttribute. Lorsque cet attribut est trouvé, le processeur XAML traitera l'espace blanc dans la collection comme significatif. La combinaison de xml:space="preserve" et d'espace blanc dans une collection WhitespaceSignificantCollectionAttribute dénotée engendre que TOUS les espaces blancs sont conservés et rendus. La combinaison de xml:space="default" et d'espace blanc dans un élément WhitespaceSignificantCollectionAttribute engendrera la normalisation d'espace blanc initiale décrite ci-dessus, ce qui laissera un espace blanc dans certaines positions et ces espaces blancs seront conservés et rendus. À vous de déterminer le comportement souhaité et d'utiliser xml:space de manière sélective pour activer le comportement de votre choix.

De même, certains éléments inclus qui correspondent à un saut de ligne dans un modèle de document dynamique ne doivent pas introduire délibérément un espace supplémentaire même dans une collection significative d'espaces blancs. Par exemple, l'élément LineBreak poursuit le même objectif que la balise <BR/> dans HTML. Pour des raisons de lisibilité des balises, un LineBreak est généralement séparé du texte qui suit par un saut de ligne créé. Ce saut de ligne ne doit pas être normalisé pour devenir un espace de début dans la ligne suivante. Pour activer ce comportement, la définition de classe pour l'élément LineBreak applique le TrimSurroundingWhitespaceAttribute, qui est ensuite interprété par le processeur XAML pour indiquer que l'espace blanc qui entoure LineBreak est toujours supprimé.

Voir aussi

Référence

Entités de caractères XML et XAML

Gestion de xml:space en XAML

Concepts

Vue d'ensemble du langage XAML (WPF)