#c_sharp #wpf
Ищу исходники 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
Ответы
Ответ 1
Набираем 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: ... ...
Комментариев нет:
Отправить комментарий