FlowDocument TextElements допускается только один родитель - PullRequest
3 голосов
/ 15 февраля 2012

Я построил новый абзац FlowDocument B, исследуя / используя элементы существующего абзаца A. К моему удивлению, элементы, которые я добавил в новый абзац B, были волшебным образом удалены из абзаца A.Я создал простую иллюстрацию ниже.После выполнения 3-й строки элемент myRun будет удален из myParagraphA.

1) Как?Каков основной механизм, который позволяет myParagraphA удалять myRun из встроенной коллекции?

2) Почему?Я предполагаю, что дизайнеры не хотели, чтобы у элемента было 2 родителя.

3) Если мои наблюдения верны, я предполагаю, что должен добавить копию myRun в myParagraphB, чтобы избежать разрушения myParagraphA.Каков наилучший способ скопировать myRun с его текстом и свойствами (клонирование)?Это удар по производительности, так как я действительно много сделаю эту операцию.

var myRun = new Run("Hello");
var myParagraphA = new Paragraph(myRun);
var myParagraphB = new Paragraph(myRun);

Спасибо,

1 Ответ

1 голос
/ 15 февраля 2012

Довольно часто, что элемент может быть только в одном списке за один раз.Обычно вы увидите свойство Parent (примечание: единственное).Это относится к XmlElement, TreeViewItem и т. Д.

Таким образом, добавляя Run в myParagraphB, вы перезаписываете его свойство Parent, а правильное кодирование этого свойства удаляет его из списка встроенных функций myParagraphA.

Решение действительно: клонирование.

...