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 问题的主要内容,如果未能解决你的问题,请参考以下文章