2009-08-24 68 views
5

下面是代碼:的RelativeSource FindAncestor問題

<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跟蹤整個列的寬度。

它不工作:文本塊的寬度始終與內部的文本匹配。任何想法?... 在此先感謝!

回答

14

有在你的代碼的兩個問題

  1. 的GridViewColumn不是文本框的視覺祖先,其祖先是GridViewColumnHeader
  2. 你應該綁定到GridViewColumnHeader,不寬的ActualWidth的(如果沒有指定寬度,這將是一個無效的號碼)

所以,你的代碼就變成了:

   <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> 
相關問題