Ваш подход должен быть предложен chibacity. Этот тип поведения является стандартным и даже используется DataGridTextColumn
, который поставляется с WPF. Из MSDN:
DataGridTextColumn creates a TextBlock element in the non-editing mode and a TextBox element in the editing mode.
Кроме того, как предлагают многие другие пользователи в комментариях, вы не должны переопределять OnRender
, чтобы настроить внешний вид элемента управления. В WPF изменения внешнего вида элемента управления могут быть выполнены путем настройки Style
и / или Template
элемента управления. Следующий стиль приводит к тому же изменению внешнего вида, что и переопределение OnRender
:
<Style TargetType="TextBox">
<Setter Property="BorderBrush" Value="Red" />
</Style>
Вы должны «извлекать и переопределять» только тогда, когда расширяете функциональность и / или назначение элемента управления, и в вашем примере нет ничего, что указывало бы на то, что вы делаете.
Кроме того, ваш RenderTestPanel.xaml подразумевает, что все, что вы делаете, - это создание сетки данных, предоставляемой WPF. Я настоятельно рекомендую использовать готовый DataGrid
, стилизовать DataGridTextColumn
, и вы (вероятно) достигнете своих целей с помощью меньшего количества кода и полностью в XAML.