3

検索テキストボックスを実装しています。TextBox.Tagへのバインドについて教えてください。

スタイル

<Style x:Key="SearchTextBox" TargetType="{x:Type TextBox}">
      <Style.Resources>
       <VisualBrush x:Key="CueBannerBrush" AlignmentX="Left" AlignmentY="Center" Stretch="None">
          <VisualBrush.Visual>
            <Label Content="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Tag}" Foreground="{StaticResource SearchTextBox.Foreground}" FontSize="{StaticResource SearchTextBox.FontSize}"/>
          </VisualBrush.Visual>
        </VisualBrush>
      </Style.Resources>
      <Setter Property="FontSize" Value="{StaticResource SearchTextBox.FontSize}" />
      <Setter Property="Foreground" Value="{StaticResource SearchTextBox.TextForeground}" />
      <Setter Property="MinWidth" Value="200" />
          <Style.Triggers>
            <Trigger Property="Text" Value="{x:Static sys:String.Empty}">
              <Setter Property="Background" Value="{StaticResource CueBannerBrush}" />
            </Trigger>
            <Trigger Property="Text" Value="{x:Null}">
              <Setter Property="Background" Value="{StaticResource CueBannerBrush}" />
            </Trigger>
            <Trigger Property="IsKeyboardFocused" Value="True">
              <Setter Property="Background" Value="White" />
            </Trigger>
          </Style.Triggers>
    </Style>

使用法

<TextBox Style="{StaticResource SearchTextBox}" Tag="Search templates" />

バインディングを機能させるにはどうすればよいですか?

4

1 に答える 1

3

この記事はあなたの記事と非常によく似ています:スタイルを使用してネストされた要素内から親プロパティにWPFバインドする

ただし、実際にはコードサンプルが提供されていないため、現在のアプローチの代わりに使用できるxamlをいくつか示します。

<Style x:Key="SearchTextBox" BasedOn="{StaticResource {x:Type TextBox}}" TargetType="{x:Type TextBox}">
  <Style.Setters>
    <Setter Property="Tag" Value=""/>
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type TextBox}">
          <Grid>
            <ScrollViewer x:Name="PART_ContentHost" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
            <TextBlock x:Name="textBlock" Opacity="0.345" Text="{TemplateBinding Tag}" TextWrapping="Wrap" Visibility="Hidden" />
          </Grid>
          <ControlTemplate.Triggers>
            <MultiTrigger>
              <MultiTrigger.Conditions>
                <Condition Property="IsFocused" Value="False" />
                <Condition Property="Text" Value="" />
              </MultiTrigger.Conditions>
              <Setter Property="Visibility" TargetName="textBlock" Value="Visible" />
            </MultiTrigger>
          </ControlTemplate.Triggers>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style.Setters>
</Style>

そして、あなたはまだあなたがすでにそれを持っていたのと同じ方法であなたのテキストボックスコードを書くでしょう:

<TextBox Style="{StaticResource SearchTextBox}" Tag="Search templates" />
于 2012-11-11T21:27:44.257 に答える