gpt4 book ai didi

wpf - 使用 FindAncestor 和 AncestorLevel 将网格高度绑定(bind)到另一个网格

转载 作者:行者123 更新时间:2023-12-04 15:04:31 25 4
gpt4 key购买 nike

我的问题是关于将一​​个元素的属性正确绑定(bind)到另一个元素。

这是我的代码的结构:

  • 数据模板包含一个网格(我们称之为网格 GridA),在网格中,我指定了一个控件的实例,称为 ControlA .
  • ControlAUserControl包含 Grid . ControlA 中有自定义逻辑(代码隐藏)动态构建内容 - 但简而言之,它使用另一个数据模板。
  • ControlA 的数据模板由另一个 Grid 组成.我要绑定(bind)Height此数据模板中此网格的属性到 Height Grid 的属性(property)在我上面的第一个要点中引用的数据模板中(称为 GridA 的网格)。

  • 这是我用于绑定(bind)的 XAML,但本质上它不起作用,因为它没有找到网格:
    <Grid Height="{Binding Path=ActualHeight,
    RelativeSource={RelativeSource FindAncestor,
    AncestorType=Grid,
    AncestorLevel=2},
    UpdateSourceTrigger=PropertyChanged}">
    </Grid>

    我理解通过指定 AncestorLevel=2 ,它将使用您要查找的类型的第二个“找到”出现,在这种情况下,类型是 Grid .所以在我看来,它会首先找到 GridControlA ,然后它会继续向上走,找到 Grid在第一个数据模板中,即 Grid命名为 GridA .这应该是第二次出现,对吗?

    最佳答案

    由于您是从第二个网格开始搜索,因此您实际上需要祖先级别 = 1(这是默认值)。观察:

    <Grid x:Name="first">
    <Grid x:Name="second">
    <Grid x:Name="third" Tag="{Binding Name, RelativeSource={RelativeSource FindAncestor, AncestorType=Grid, AncestorLevel=2}}">
    <!-- displays "first", not "second" -->
    <TextBlock Text="{Binding Tag, ElementName=third}"/>
    </Grid>
    </Grid>
    </Grid>

    顺便说一句,您的设计听起来像是与 WPF 的布局系统作斗争而不是拥抱它。因此,您可能会为自己制造很多不必要的痛苦。

    关于wpf - 使用 FindAncestor 和 AncestorLevel 将网格高度绑定(bind)到另一个网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3651852/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com