Я создаю класс, наследуемый от System.Windows.Documents.Paragraph
, и добавляю новое свойство коллекции. Вот очень упрощенное представление этого класса:
public class ExtendedParagraph : Paragraph
{
public Dictionary<string, string> Attributes { get; set; }
}
Мне нужно создать и заполнить экземпляр вышеуказанного класса из Xaml, для чего требуется синтаксис разметки, позволяющий отдельно объявлять содержимое абзаца и элементы его коллекции Attributes.
Поскольку класс Paragraph украшен атрибутом [ContentProperty("Inlines")]
, я предполагаю, что мне нужно явно заполнить коллекции Inlines и Attributes. Основываясь на синтаксисе Xaml, который я видел для решения подобных задач в других местах, я предполагаю что-то вроде этого:
<ExtendedParagraph xmlns="clr-namespace:MyNamespace">
<ExtendedParagraph.Inlines>
This is where the paragraph content goes
</ExtendedParagraph.Inlines>
<ExtendedParagraph.Attributes>
This is where the members of the Attributes property are declared
</ExtendedParagraph.Attributes>
</ExtendedParagraph>
Однако при таком подходе возникают две проблемы:
[1] Когда приведенный выше Xaml анализируется с помощью XamlReader, происходит сбой с сообщением «Свойство ExtendedParagraph.Inlines уже установлено и может быть установлено только один раз».
[2] Я не уверен, какую разметку следует использовать для объявления экземпляров KeyValuePair в элементе Attributes.
Я надеюсь, что кто-то может указать мне в правильном направлении.
Большое спасибо, Тим
Изменить - я нашел ответ на вопрос [1]. Это просто влечет за собой объявление сначала коллекции Attributes (с использованием синтаксиса элемента свойства), а затем содержимого абзаца:
<ExtendedParagraph xmlns="clr-namespace:MyNamespace">
<ExtendedParagraph.Attributes>
This is where the members of the Attributes property are declared
</ExtendedParagraph.Attributes>
This is where the paragraph content goes
</ExtendedParagraph>
Однако декларативное добавление элементов в Dictionary<TKey, TValue>
оказывается более сложным. Я нашел несколько подсказок в этот пост, но я еще не добился рабочего результата. Ваши идеи по-прежнему приветствуются.