<Style x:Key="Border"
TargetType="{x:Type TextBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBox}">
<Border BorderThickness="1">
<ScrollViewer Margin="0"
x:Name="PART_ContentHost" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
为什么应用样式后无法更改TextBox
背景?
<TextBox Style="{StaticResource Border}"
Background="Bisque"
Height="77"
Canvas.Left="184"
Canvas.Top="476"
Width="119">Text box</TextBox>
<Style x:Key="Border" TargetType="{x:Type TextBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBox}">
<Border Background="{TemplateBinding Background}" BorderThickness="1">
<ScrollViewer Margin="0" x:Name="PART_ContentHost" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
您需要添加以下行:
Background="{TemplateBinding Background}"
覆盖文本框的原始控件模板。背景是模板的子级。您需要再次将其绑定到目标文本框。
通过覆盖控件的模板,实际上是在定义如何向用户显示它。在模板中,您不考虑控件中的任何"设置",因此它将始终绘制为边框,内部有一个滚动查看器。
如果要使用控件的属性自定义模板的某些部分,可以使用TemplateBinding
将模板内容的属性绑定到控件中的属性
前任:
<Style x:Key="Border"
TargetType="{x:Type TextBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBox}">
<Border BorderThickness="1"
Background="{TemplateBinding Background}">
<ScrollViewer Margin="0"
x:Name="PART_ContentHost" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
在本例中,您将边框的背景属性 ( Background=
) 绑定到文本框的背景属性 ( {TemplateBinding Background
)
因此,总而言之,您在绑定中使用此表示法:
ThePropertyIWantToSet="{TemplateBinding PropertyInMyControl}"