RelativeSource FindAncestor问题

Teo*_*dor 5 wpf binding listview relativesource

这是代码:

<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>
Run Code Online (Sandbox Code Playgroud)

基本上我要做的是使标题中的TextBlock遵循整列的宽度.

它不起作用:文本块的宽度始终与内部文本匹配.有什么想法吗?...提前致谢!

Tho*_*que 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>
Run Code Online (Sandbox Code Playgroud)