Я создаю класс, который наследуется от System.Windows.Documents.Paragraph
и добавляет новое свойство коллекции. Вот очень упрощенное представление этого класса:
public class ExtendedParagraph : Paragraph
{
public Dictionary<string, string> Attributes { get; set; }
}
Мне нужно создать и заполнить экземпляр вышеупомянутого класса изнутри Xaml, для чего требуется синтаксис разметки, позволяющий объявлять содержимое абзаца и членов его коллекции атрибутов отдельно.
Поскольку класс 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 (используя синтаксис элемента свойства), а затем содержание Paragraph:
<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>
оказывается более сложным. Я нашел несколько подсказок в этом посте , но я еще не достиг рабочего результата. Ваши идеи все еще приветствуются.