6
votes

Existe-t-il un équivalent d'éléments pour le contenu du texte?

J'ai des données que je veux présenter dans un 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.

à cette fin, je voudrais créer une liste à bulleted. ( code>) hors du contenu d'un 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>


edit : strong> le Article Sergey est lié au début parfait point. Le seul problème est que le code de l'article ne peut utiliser qu'une section 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);


0 commentaires

3 Réponses :


0
votes

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>


3 commentaires

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 pour remplacer le StackPanel avec un wrappanel.



0
votes

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.

BubbleWrap souligne que cela est listionnaire et que le Constructeur interne a un constructeur interne. Alors ...

Je pense que ce que vous auriez à faire, c'est ceci: xxx

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 ( sur chaque élément.


3 commentaires

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 / ... )



9
votes

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!


2 commentaires

Impressionnant. L'article ne fonctionnera pas avec mais il n'a pris qu'un petit Tweak pour l'étendre - voir mon édition à la question. Merci!


Malheureusement, vous pouvez imprimer directement le flowdocument directement. Vous devez d'abord rendu dans le lecteur de flowdocument.