Ищу исходники 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 и ищем:
Исходники тем со стилями можно найти локально в файлах 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 и выглядят следующим образом:
<ResourceDictionary ...>
<Style TargetType="{x:Type local:TextEditor}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:TextEditor}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
Важно понимать, что таким стилем переопределяется не только Template (по сути — разметка контрола), а и вообще все свойства базового стиля, т.к. BasedOn по-умолчанию равен null.
Если в новом стиле нужно унаследовать некий существующий стиль (в вашем случае это стиль RichTextBox), и тем самым сохранить поведение и разметку RichTextBox, то укажите BasedOn явно, и не затирайте свойство Template:
...
<Style TargetType="{x:Type local:TextEditor}" BasedOn="{StaticResource {x:Type RichTextBox}}">
</Style>
...
Продвижение своими сайтами как стратегия роста и независимости