首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RelativeSource兄弟姐妹

RelativeSource兄弟姐妹
EN

Stack Overflow用户
提问于 2015-02-21 15:44:56
回答 1查看 1.4K关注 0票数 1

在tabitem3下面运行良好。

我不想给控件命名,而是通过RelativeSource传递属性。

失败的代码是

代码语言:javascript
复制
Binding RelativeSource="{RelativeSource AncestorType={x:Type Expander}}" Path="IsExpanded"

转换器中的错误是不设置依赖对象。

扩展者是兄弟姐妹,而不是祖先。

我如何才能找到兄弟姐妹(没有x:Name)?

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-22 17:33:32

我不确定Expander是否是TextBlock的真正兄弟。第一个是TabItem的标题,前者是TabItem的内容的子项。

无论如何,如果您不想使用命名(实际上我也不喜欢它),您可以通过寻找一个TabItem祖先在逻辑树中“向上”,然后可以通过使用正确的路径“向下走”。

其结果是这种约束:

代码语言:javascript
复制
<Binding RelativeSource="{RelativeSource AncestorType={x:Type TabItem}}" Path="Header.IsExpanded" />

我希望它能帮到你。

编辑

要测试我的绑定,可以使用以下简单的XAML:

代码语言:javascript
复制
<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,则绑定不起作用。在这种情况下,您可以这样扩展我的想法:

代码语言:javascript
复制
<Binding RelativeSource="{RelativeSource AncestorType={x:Type TabControl}}" Path="SelectedItem.Header.IsExpanded" />
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28647646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档