Создание шаблона включает в себя необходимость указать, где найти исходные свойства. Поэтому XAML предоставляет TemplateBinding , который позволяет привязать свойства шаблонного элемента управления к определяемому вами содержимому.
Очевидным решением было бы просто использовать расширение разметки для привязки текста например:
<TextBox Text="{TemplateBinding Text}" .../>
К сожалению, это не очень хорошо работает в случае TextBox
, как описано в этом вопросе . Решение заключается в привязке по относительному источнику, как описано там. Итак, ваш шаблон должен выглядеть так, чтобы обеспечить его текст, как и ожидалось:
<ControlTemplate x:Key="TextBoxBaseControlTemplate" TargetType="{x:Type TextBox}">
<Border x:Name="Bd" BorderBrush="DarkGray" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="4,4,4,4">
<TextBox Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Text, UpdateSourceTrigger=PropertyChanged}"
Background="#353535" Foreground="White"/>
</Border>
</ControlTemplate>
Также обратите внимание, что TextBoxBase
не указывает свойство Text
, поэтому здесь следует отдавать предпочтение шаблону TextBox
.