RelativeSource FindAncestor 问题

Posted

技术标签:

【中文标题】RelativeSource FindAncestor 问题【英文标题】:RelativeSource FindAncestor issue 【发布时间】:2010-11-22 07:18:46 【问题描述】:

代码如下:

<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 遵循整个列的宽度。

它不起作用:文本块的宽度总是与里面的文本匹配。有任何想法吗?... 提前致谢!

【问题讨论】:

【参考方案1】:

你的代码有两个问题

    GridViewColumn 不是 TextBox 的视觉祖先,它的祖先是 GridViewColumnHeader 你应该绑定到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>

【讨论】:

以上是关于RelativeSource FindAncestor 问题的主要内容,如果未能解决你的问题,请参考以下文章

使用Binding的RelativeSource

WPF---数据绑定之RelativeSource

Convert和RelativeSource

在WPF中如何使用RelativeSource绑定

来自 ToolTip 或 ContextMenu 的 RelativeSource 绑定

RelativeSource FindAncestor 问题