在tabitem3下面运行良好。
我不想给控件命名,而是通过RelativeSource传递属性。
失败的代码是
Binding RelativeSource="{RelativeSource AncestorType={x:Type Expander}}" Path="IsExpanded"转换器中的错误是不设置依赖对象。
扩展者是兄弟姐妹,而不是祖先。
我如何才能找到兄弟姐妹(没有x:Name)?
<TabItem x:Name="tabitem3" IsSelected="False">
<TabItem.Header>
<Expander x:Name="tabexp3" Header="Three" IsHitTestVisible="True"
Expanded="expcolp" Collapsed="expcolp" IsExpanded="False"/>
</TabItem.Header>
<TextBlock Text="Content Three TabItem" Background="LightBlue" >
<TextBlock.Visibility>
<MultiBinding Converter="{StaticResource bvc2}" Mode="OneWay">
<Binding ElementName="tabexp3" Path="IsExpanded"/>
<Binding ElementName="tabitem3" Path="IsSelected" />
</MultiBinding>
</TextBlock.Visibility>
</TextBlock>
</TabItem>
<TabItem IsSelected="False">
<TabItem.Header>
<Expander Header="Four" IsHitTestVisible="True"
Expanded="expcolp" Collapsed="expcolp" IsExpanded="False"/>
</TabItem.Header>
<TextBlock Text="Content Four TabItem" Background="LightBlue" >
<TextBlock.Visibility>
<MultiBinding Converter="{StaticResource bvc2}" Mode="OneWay">
<Binding RelativeSource="{RelativeSource AncestorType={x:Type Expander}}" Path="IsExpanded"/>
<Binding RelativeSource="{RelativeSource AncestorType={x:Type TabItem}}" Path="IsSelected"/>
</MultiBinding>
</TextBlock.Visibility>
</TextBlock>
</TabItem>发布于 2015-02-22 17:33:32
我不确定Expander是否是TextBlock的真正兄弟。第一个是TabItem的标题,前者是TabItem的内容的子项。
无论如何,如果您不想使用命名(实际上我也不喜欢它),您可以通过寻找一个TabItem祖先在逻辑树中“向上”,然后可以通过使用正确的路径“向下走”。
其结果是这种约束:
<Binding RelativeSource="{RelativeSource AncestorType={x:Type TabItem}}" Path="Header.IsExpanded" />我希望它能帮到你。
编辑
要测试我的绑定,可以使用以下简单的XAML:
<TabControl>
<TabItem IsSelected="True">
<TabItem.Header>
<Expander Header="One" IsHitTestVisible="True" IsExpanded="False"/>
</TabItem.Header>
<TabItem.Content>
<TextBlock Text="Some contents..." />
</TabItem.Content>
</TabItem>
<TabItem IsSelected="False">
<TabItem.Header>
<Expander Header="Two" IsHitTestVisible="True" IsExpanded="False"/>
</TabItem.Header>
<TabItem.Content>
<TextBlock>
<TextBlock.Text>
<Binding RelativeSource="{RelativeSource AncestorType={x:Type TabItem}}" Path="Header.IsExpanded" />
</TextBlock.Text>
</TextBlock>
</TabItem.Content>
</TabItem>
</TabControl>如果展开/折叠第二个扩展程序,则TextBlock的文本将发生更改。如果TabItem将IsSelected设置为true,则绑定不起作用。在这种情况下,您可以这样扩展我的想法:
<Binding RelativeSource="{RelativeSource AncestorType={x:Type TabControl}}" Path="SelectedItem.Header.IsExpanded" />https://stackoverflow.com/questions/28647646
复制相似问题