Как я могу создать подкласс класса 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.