Как я могу создать подкласс класса Inline? (тот, который используется в FlowDocument)

В WPF я хотел бы создать кастом Inline реализация. Из документации Inline: "Абстрактный класс, который обеспечивает основу для всех элементов содержимого встроенного потока." Классы как Figure, Run или же Span наследовать от Inline,

Мой пользовательский класс, наследующий от Inlineбудет что-то вроде "2 выровненных Run". У меня есть особые потребности в документообороте, и это, кажется, единственный способ. Однако я не знаю, с чего начать: Inline не определяет ни одного члена! Это абстрактный класс, поэтому он предназначен для наследования, но нет документации о том, как наследовать от него. Не в MSDN и нигде больше, где я мог бы его найти.

Если вы можете предоставить некоторые онлайн-ресурсы (учебник / блог / статья) или пример кода, как создать подкласс Inline, Например, просто пустое поле некоторой ширины и высоты.

Если вы хотите знать, почему я хочу создать кастом Inline элемент взглянуть на вопрос Создать редактор гитарных аккордов в WPF.

1 ответ

Решение

Базовые классы могут использоваться для простых целей добавления точности типов. Например, код в процессоре FlowDocument может просто захотеть сделать код, подобный следующему:

if(currentElement is Inline)
{
   // Do something
}

На самом деле Inline вообще ничего не должен делать.

Что касается подклассов Inline, я думаю, вы не сможете достичь того, чего хотите. Насколько я понимаю, средство визуализации FlowDocument отвечает за просмотр типов элементов и интерпретацию их поведения по его типу и свойствам. Другими словами, он не знает вашего пользовательского кода. Я думаю, что лучшее, что вы могли бы сделать, - это создать подкласс из полезного элемента и сделать так, чтобы ваш подкласс связывался со значениями свойств или чем-то, что можно переопределить.

Вы также можете добавлять вложенные свойства и обрабатывать дочерние элементы, определяющие эти свойства. Например, если вы хотите, чтобы контейнер гиперссылок позволял различным дочерним элементам предоставлять разные ссылки, вы могли бы создать подкласс из Hyperlink, определить новое свойство присоединенного элемента Link и обрабатывать события щелчка для дочерних элементов иначе, чем сама Hyperlink.

Вы также можете добиться некоторого успеха с элементами InlineUIContainer и BlockUIContainer, которые позволяют вам встраивать в него любой элемент UIElement, включая пользовательские элементы UIElement.

Другие вопросы по тегам