J'ai des données que je veux présenter dans un à cette fin, je voudrais créer une liste à bulleted. ( flowdocument code>. Cela sera fondamentalement une vue qui explique les données de manière amicale, avec des en-têtes de section, des paragraphes du texte, etc., et que je vais afficher dans un flowocumentscrollviewer.
Observablecollection code>. Je sais comment faire cela avec
itemsControl code>, mais comment puis-je le faire pour
listitem code> éléments dans un
flowdocument code>, puisque ils font partie du
textelement code> hiérarchie de classe plutôt que le contrôle
code> hiérarchie? Y a-t-il un équivalent de
itemsControl code> pour le contenu de texte à l'intérieur d'un
textblock code> ou
flowdocument code>? P>
section code> ou un
Tablerowgroup code> comme panneau d'éléments, et ne prend pas encore en charge à l'aide d'un
. Mais c'était trivial à résoudre - juste une question d'ajout de ce code à la fin de
itemsContent.generatecontent code>, juste avant le dernier
sinon code>: p>
else if (panel is List)
((List) panel).ListItems.Add((ListItem) element);
3 Réponses :
au lieu d'utiliser un fichier flowdocument code>, vous pouvez utiliser un
itemsControl code> et modifier le panneau utilisé pour afficher des éléments à un wrappanel . Cela vous permettra d'utiliser les
itemsControl code> comme vous le souhaitez, mais changez de sémantique d'affichage à un
wrappanel CODE> (que je crois que fonctionne comme un flowdocument code>. Vous «D Faites-le quelque chose comme ceci:
<ItemsControl>
<ItemsControl.ItemsPanelTemplate>
<WrapPanel />
</ItemsControl.ItemsPanelTemplate>
</ItemsControl>
Je vois où vous allez, mais non, cela n'utiliserait pas un wrappanel, il utiliserait une stackpanel standard (puisque les éléments de la liste sont un au-dessus de l'autre). Oui, il a traversé mon esprit pour simplement abandonner son flowdocument et utiliser des commandes normales, mais le flowdocument a ses avantages (sélectionnez + Copie, Impression), donc je suis toujours curieux s'il y a un moyen de faire en sorte que la base de données à l'intérieur d'un flowdocument.
Je pense que vous avez manqué son point (ou j'ai mal compris votre commentaire), vous pouvez remplacer le StackPanel en définissant la propriété ÉlémentsPaneltemplate, dans son exemple, la StackPanel serait remplacée par un wrappanel. Vous avez raison, cela n'aboutit pas ce que vous voulez.
Bien sûr, j'ai eu ça. Mais si je crée une liste à puces, je ne veulons I> pour remplacer le StackPanel avec un wrappanel.
Je pense que vous recherchez l'élément de liste: http://msdn.microsoft.com/fr- US / Bibliothèque / System.Windows.documents.list.aspx
BubbleWrap pointe quelques détails de plus. Vous auriez probablement liaison à la propriété LISTEMS et devez utiliser un ValeurConverter pour convertir votre liste source en une liste de type listItemsCollection. P>
BubbleWrap souligne que cela est listionnaire et que le Constructeur interne a un constructeur interne. Alors ... P>
Je pense que ce que vous auriez à faire, c'est ceci: p> C'est assez malheureux, mais je pense que cela fonctionnerait. Vous devriez écrire un convertisseur pour créer un nouvel objet de la liste et appeler .add ( code> sur chaque élément. P> p>
Mais l'élément de liste ne prend pas en charge la liaison à une collection arbitraire pour générer ses listitems, n'est-ce pas?
La collection LisTitems devrait. Vous devrez convertir la collection de la collecte à une liste ListitemCollection (via une valeurConverter), mais cela vous donnerait une sortie sous une manière entièrement prise en charge et flowdocumentase.
Sauf que la propriété Listitems est réadonnée et celle-ci n'est pas censée créer une liste LisitemSCollection. ( msdn.microsoft.com/en-us/library / ... )
Ce que vous recherchez est possible, mais nécessite une quantité importante de codage. Heureusement, Vincent van den Berghe a posté un bel article sur le MSDN décrivant comment Créer une UIS flexible Avec les documents de flux et la liaison de données , y compris le code! P>
Impressionnant. L'article ne fonctionnera pas avec
Malheureusement, vous pouvez imprimer directement le flowdocument directement. Vous devez d'abord rendu dans le lecteur de flowdocument.