Страницы

Поиск по вопросам

пятница, 26 апреля 2019 г.

Где найти исходники RichTextBox и FlowDocument?

Ищу исходники RichTextBox и FlowDocument.
У меня TextEditor унаследованный от RichTextBox
Свойства перекрываются этой строкой:
DefaultStyleKeyProperty.OverrideMetadata(typeof(TextEditor), new FrameworkPropertyMetadata(typeof(TextEditor)));

public class TextEditor : RichTextBox
static TextEditor() {
DefaultStyleKeyProperty.OverrideMetadata(typeof(TextEditor), new FrameworkPropertyMetadata(typeof(TextEditor)));
Если её закоммнтировать то контроллер работает как RichTextBox.
Но не рааботают свойства TextEditor.
Без закомметирования - контроллер работает как TextEditor. Но в него нельзя вставлять картинки.
Частично пример моего кода здесь: Как вставить картинку в RichTextBox?
public class TextEditor : RichTextBox
public sealed class TextDocument : FlowDocument


Ответ

Набираем sourceof.net и ищем:
RichTextBox FlowDocument
Исходники тем со стилями можно найти локально в файлах Visual Studio. Например, у 2015-ой Студии они хранятся здесь:
%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\DesignTools\SystemThemes\Wpf
А строчкой
DefaultStyleKeyProperty.OverrideMetadata(typeof(TextEditor), new FrameworkPropertyMetadata(typeof(TextEditor)));
вы перекрываете не свойства, а стиль контрола по-умолчанию: теперь он будет равен стилю, у которого TargetType выставлен в TextEditor
Стили кастомных контролов обычно задаются в файле Generic.xaml и выглядят следующим образом:

Важно понимать, что таким стилем переопределяется не только Template (по сути — разметка контрола), а и вообще все свойства базового стиля, т.к. BasedOn по-умолчанию равен null
Если в новом стиле нужно унаследовать некий существующий стиль (в вашем случае это стиль RichTextBox), и тем самым сохранить поведение и разметку RichTextBox, то укажите BasedOn явно, и не затирайте свойство Template
... ...

Комментариев нет:

Отправить комментарий