【问题标题】:RelativeSource binding does not workRelativeSource 绑定不起作用
【发布时间】:2018-11-07 05:22:03
【问题描述】:

下面的第一个文本框找不到父 TabItem,但是第二个文本框可以。我在第一次绑定中做错了什么?

<TabItem Style="{StaticResource TabItemStyle}" x:Name="zzzzz">
   <StackPanel >
      <TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TabItem}}, Path=IsSelected}"></TextBlock>
      <TextBlock Text="{Binding ElementName=zzzzz, Path=IsSelected}" />
   </StackPanel>
</TabItem>

错误消息是:System.Windows.Data 错误:4:找不到与引用“RelativeSource FindAncestor, AncestorType='System.Windows.Controls.TabItem', AncestorLevel='1'' 进行绑定的源。绑定表达式:路径=IsSelected;数据项=空;目标元素是'TextBlock'(名称='');目标属性是“文本”(类型“字符串”)

我从未设置过 AncestorLevel,但我尝试将其设置为 5000 仍然无法正常工作。

请注意,我没有像 this question 中所示那样从 DataTemplate 设置绑定。

【问题讨论】:

  • @FoggyFinder 谢谢 - 我看到了这个,但我不明白它如何应用于我的场景。事实上,我正在寻找 TabItem,正如第二个 TextBlock 所证明的那样。
  • @ASh 查看更新后的问题。
  • @mm8 是的一个 TextBlock 读取为 true - 第二个。我在我的工作计算机上重新制作了这个 - 只需创建一个新项目并在 MainWindow 中添加一个 TabControl。粘贴问题中的代码。第一个 TextBlock 是空的。删除样式没有区别。

标签: wpf


【解决方案1】:

TabItem 不是 TabControlcontent 面板中 TextBlock 的视觉祖先,因此您的第一个绑定将永远无法工作。

如果您将TextBlock 放在TabItem标题 中,则可以使用{RelativeSource} 绑定到后者。但是当前可见的内容面板是TabContol 本身的视觉子代,而不是特定的TabItem

【讨论】:

  • 我想这里的关键词是“视觉”,因为我的问题中的第二个绑定工作正常。谢谢你的回答。
猜你喜欢
  • 1970-01-01
  • 2011-03-12
  • 1970-01-01
  • 2012-09-07
  • 1970-01-01
  • 1970-01-01
  • 2014-12-01
  • 2011-01-18
  • 1970-01-01
相关资源
最近更新 更多