相对源 FindAncestor 问题

5

这里是代码:

<GridViewColumn DisplayMemberBinding="{Binding Path=BookId}" Width="100">
    <GridViewColumn.Header>
        <Border BorderBrush="Black">
            <TextBlock Width="{Binding RelativeSource=
                                       {RelativeSource FindAncestor, 
                                       AncestorType={x:Type GridViewColumn}}, 
                                       Path=Width}" Text="ID">
                <TextBlock.ContextMenu>
                    <ContextMenu>item1</ContextMenu>
                </TextBlock.ContextMenu>
            </TextBlock>
            </Border>
    </GridViewColumn.Header>
</GridViewColumn>

我想做的是让标题中的TextBlock跟随整个列的宽度变化。

但它并没有起作用:textblock的宽度始终与文本内容相匹配。有什么建议吗?提前感谢!

1个回答

14

您的代码有两个问题:

  1. GridViewColumn 不是 TextBox 的视觉祖先,它的祖先是 GridViewColumnHeader
  2. 您应该绑定到 GridViewColumnHeader 的 ActualWidth,而不是 Width(如果未指定 Width,则将是无效的数字)

因此,您的代码变为:

              <GridViewColumn
                            DisplayMemberBinding="{Binding Path=BookId}"
                            Width="100">
                <GridViewColumn.Header>
                    <Border BorderBrush="Black" >
                        <TextBlock Text="ID" Width="{Binding RelativeSource=
                                                        {RelativeSource FindAncestor, 
                                                        AncestorType={x:Type GridViewColumnHeader}}, 
                                                        Path=ActualWidth}">
                            <TextBlock.ContextMenu>
                                <ContextMenu>item1</ContextMenu>
                            </TextBlock.ContextMenu>
                        </TextBlock>
                        </Border>
                </GridViewColumn.Header>
            </GridViewColumn>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接