为什么这个Binding在XAML中不起作用?

时间:2014-05-29 17:13:44

标签: wpf xaml

我使用此XAML模拟文本框上的水印文本,但Text Property的绑定无效:

<TextBox x:Name="txtSearch" BorderThickness="0">
  <ap:CueBannerService.CueBanner>
    <TextBlock Foreground="Black" Opacity=".7" Text="{Binding Path=WatermarkText}"/>
  </ap:CueBannerService.CueBanner>
</TextBox>

另一方面,以下任何代码都有效:

<TextBlock Foreground="Black" Opacity=".7" Text="Watermark Test"/>
<TextBox Opacity=".7" Text="{Binding Path=WatermarkText}"/>

为什么不工作?谢谢!

更新

这也可以正常工作(没有TextBlock):

<TextBox x:Name="txtSearch" BorderThickness="0" ap:CueBannerService.CueBanner="{Binding Path=WatermarkText}">

更新2

这也有效!:

<TextBox x:Name="txtSearch" BorderThickness="0">
  <ap:CueBannerService.CueBanner>
    <TextBlock Foreground="Black" Opacity=".7" Text="Watermark Text"/>
  </ap:CueBannerService.CueBanner>
</TextBox>

1 个答案:

答案 0 :(得分:0)

使用以下内容替换TextBlock的绑定:

{Binding DataContext.WatermarkText,RelativeSource = {RelativeSource AncestorType = {x:Type TextBox}}}

将检查为什么这不起作用。


这应该有效!我们确保将与TextBox相关联的DataContext用于TextBlock:

{Binding DataContext.WatermarkText,ElementName = txtSearch}