为什么应用样式后无法更改文本框背景


<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}"

相关内容

  • 没有找到相关文章

最新更新