2010-05-25 8 views
0

Dans le cadre d'un projet d'éditeur, j'ai besoin d'ajouter des fonctionnalités au contrôle WPT RichTextBox pour permettre à l'utilisateur d'effectuer des opérations sur une table. Une de ces opérations consiste à appliquer une nouvelle valeur de largeur à une ou plusieurs colonnes de la table. J'ai une fonction qui applique une nouvelle valeur de largeur aux objets TableColumn en question, et la table se redimensionne bien. Cependant, j'ai remarqué que l'opération de changement de largeur de colonne ne semble pas être ajoutée à la pile d'annulation. En d'autres termes, si un utilisateur tape quelque chose, puis change une largeur de colonne, puis sélectionne Annuler, le contrôle RichTextBox annule la frappe de l'utilisateur. Undo et redo ne semblent pas détecter la modification de propriété sur l'objet TableColumn.Annuler/Redo Prise en charge des modifications de table dans WPF RichTextBox

Y a-t-il un moyen de faire en sorte que cette opération se produise d'une manière qui soit réellement annulable/redoable?

Répondre

2

Malheureusement, il semble que les objets FlowDocument TableColumn sont considérés comme des directives de mise en page plutôt que comme des objets obligatoires. Par conséquent, les modifications apportées à ces objets ne sont pas suivies par le système de suivi des modifications généré dans le contrôle WPT RichTextBox. Voir here pour plus de détails.

J'ai travaillé autour du problème en apportant des modifications de table impliquant des objets TableColumn dans des opérations atomiques qui seraient suivies par le système de suivi des modifications. Fondamentalement, si je veux effectuer une opération impliquant manipuler des objets TableColumn, j'ai commencé une opération d'annulation groupée, enlevé la Table englobante de la FlowDocument, l'ai manipulée comme nécessaire, l'ai ajoutée à FlowDocument, puis ai fermé le batch d'annulation. De cette façon, le système de suivi des modifications enregistre un remplacement du contenu existant, que l'annulation/rétablissement peut gérer correctement.