3
<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>
4

2 に答える 2

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

テキスト ボックスの元のコントロールテンプレートを上書きします。BackgroundTemplateの子です。もう一度ターゲット テキスト ボックスにバインドする必要があります。

于 2012-11-30T19:04:29.860 に答える
0

コントロールのテンプレートを上書きすることで、文字どおり、コントロールがユーザーにどのように表示されるかを定義しています。テンプレートでは、コントロールの「設定」を考慮しないため、常に ScrollViewer が内部にある Border として描画されます。

コントロールのプロパティを使用してテンプレートの一部をカスタマイズする場合は、次を使用して、テンプレート コンテンツのプロパティをコントロールのプロパティにバインドできます。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>

この場合、Border ( Background=) の Background プロパティを TextBox ( {TemplateBinding Background)の Background プロパティにバインドしています。

つまり、要約すると、バインディングでは次の表記を使用します。

ThePropertyIWantToSet="{TemplateBinding PropertyInMyControl}"
于 2012-11-30T20:02:49.417 に答える