2009-08-24 9 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、ない幅のActualWidthに特異的に結合する必要がありますGridViewColumnHeader
  2. (あります幅が指定されていない場合、それは無効な番号になります)

だからあなたのコードは次のようになります。

   <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>