Je travaille avec un FlowDocument
dans un WPF RichTextBox
. Certains des éléments de document de flux sont créés à l'aide de sous-classes des classes de structure System.Windows.Documents
et tous les éléments utilisent la propriété Tag
pour stocker des données supplémentaires.Perte de données pendant les opérations du Presse-papiers WPF
Si j'utilise un XamlWriter pour sérialiser un arbre de documents, tout est correctement reflétée dans la sortie Xaml
résultant.
Cependant, si je simplement copier et coller dans le RichTextBox
, bien que les éléments collés soient visuellement identiques à ceux à partir de laquelle ils ont été copiés, l'opération du presse-papiers supprime toutes mes données supplémentaires. Plus précisément, tous les éléments sous-classés sont collés en tant qu'instances de leurs types de structure de base et aucun d'entre eux n'a de données dans leur propriété Tag
. Cela suggère qu'une opération de presse-papiers WPF sur un RichTextBox
n'utilise pas XamlWriter
pour la sérialisation, malgré le fait que les données du Presse-papiers sérialisé identifient son format comme "Xaml".
J'imagine que la raison de ce comportement est d'assurer un dénominateur commun lors du collage dans d'autres applications compatibles avec Xaml qui ne possèdent pas nécessairement la connaissance de mes types personnalisés. Mais j'ai besoin de mettre en œuvre un mécanisme de copier/coller plus riche à utiliser dans mon application.
Je suppose que je peux probablement intercepter l'événement de copie et ajouter des données de presse-papiers dans un format personnalisé, qui est ensuite appliqué dans l'événement de collage. Cependant, ceci présente ses propres complications, car les éléments peuvent avoir besoin d'être enveloppés avant de coller (par exemple des éléments en ligne qui sont collés dans un contexte d'élément de bloc). Par conséquent, j'espère éviter de réinventer la roue et j'apprécierais tout conseil sur la façon de le faire fonctionner en utilisant l'infrastructure du cadre existant.
Merci pour vos idées. Bien que cela ne résolve pas complètement le problème, cela me donne l'information nécessaire pour interagir avec le presse-papiers. En outre, l'article que vous avez recommandé comprend une technique ingénieuse pour déterminer ce qui a été collé. Est-ce votre article? Si oui, merci pour ceci et vos autres tutoriels de blog. Dernière question - faites-vous du travail de consultation? Si oui, puis-je vous contacter via PM? Merci encore. –
Merci Tim, même si ce n'est pas mon blog. Ya je fais du travail de consultation chaque fois que j'ai le temps. S'il vous plaît n'hésitez pas à me contacter à [email protected] – akjoshi