如何从 wpf 中的样式绑定到标签?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/13334943/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-13 06:08:59  来源:igfitidea点击:

How can I bind to tag from style in wpf?

wpfbinding

提问by Siarhei Kuchuk

I'm implementing a search textbox; could you please help me with binding to TextBox.Tag?

我正在实现一个搜索文本框;你能帮我绑定到 TextBox.Tag 吗?

Style

风格

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

Usage

用法

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

How can I get the binding to work?

我怎样才能让绑定工作?

采纳答案by Bill Tarbell

This article here is extremely similar to yours: WPF Bind to parent property from within nested element using style

此处的这篇文章与您的非常相似:WPF 使用样式从嵌套元素内绑定到父属性

Though, it doesn't really give a code sample, so here's some xaml you can use as an alternative to your current approach.

不过,它并没有真正提供代码示例,因此这里有一些 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>

And you'll still write your textbox code the same way you already had it:

你仍然会像你已经拥有的一样编写你的文本框代码:

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