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

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

MyПользовательский класс, унаследованный от Inline, будет выглядеть примерно так: «Выполнение с 2 линиями».У меня есть особые потребности в документообороте, и это, кажется, единственный путь.Однако я не знаю с чего начать: Inline не определяет ни одного члена! Это абстрактный класс, поэтому он предназначен для наследования, но документации нет о том, как наследовать от него.Не в MSDN и нигде больше, где я мог бы его найти.

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

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

1 Ответ

2 голосов
/ 30 апреля 2011

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

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

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

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

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

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

...