2011-11-09 8 views
0

HeaderTemplateテンプレートからDataGridTextColumnを検索するにはどうすればよいですか? XAMLのみを使用してこれを実行する方法はありますか?私はタイプDataGridTextColumnのFindAncestorを試しましたが、見つけられません。ヘッダーテンプレートからDataGridColumnを検索する

私はDataGridTextColumnがビジュアルツリーの一部ではないことを知っています。このための回避策はありますか?

+0

あなたは私たちにあなたがコラムで何をしようとしている、とどこがXAMLでからそれにアクセスしようとしているものの例を与えることができますか? – Rachel

答えて

0

本当に列オブジェクト全体が必要ですか? DataContextは、ヘッダーとして渡すものであれば何でも構いません。

<DataGridTextColumn Header="Name" Binding="{Binding Name}"> 
    <DataGridTextColumn.HeaderTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding}" Foreground="Red" /> 
     </DataTemplate> 
    </DataGridTextColumn.HeaderTemplate> 
</DataGridTextColumn> 

これにより、テキスト「名前」の赤いヘッダーが表示されます。

<DataGrid ItemsSource="{Binding Data}"> 
    <DataGrid.Columns> 
     <DataGridTextColumn x:Name="nameColumn" Header="Name" Binding="{Binding Name}"> 
      <DataGridTextColumn.HeaderTemplate> 
       <DataTemplate> 
        <TextBlock Foreground="Red"> 
         <Run Text="{Binding Mode=OneWay}" /> 
         <Run Text=" - " /> 
         <Run Text="{Binding ActualWidth, ElementName=nameColumn, Mode=OneWay}" /> 
        </TextBlock> 
       </DataTemplate> 
      </DataGridTextColumn.HeaderTemplate> 
     </DataGridTextColumn> 
    </DataGrid.Columns> 
</DataGrid> 

は、これは「名前」とヘッダの列幅を示しています。あなたが実際に列が必要な場合は

あなたはElementNameバインディングを使用することができます。

0

find ancestorを使用してデータグリッドのインデックスで列にアクセスします。

<DataGrid ItemsSource="{Binding Data}"> 
<DataGrid.Columns> 
    <DataGridTextColumn x:Name="nameColumn" Header="Name" Binding="{Binding Name}"> 
     <DataGridTextColumn.HeaderTemplate> 
      <DataTemplate> 
       <TextBlock Foreground="Red"> 
        <Run Text="{Binding Mode=OneWay}" /> 
        <Run Text=" - " /> 
        <Run Text="{Binding Columns[0].ActualWidth, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}, Mode=OneWay}" /> 
       </TextBlock> 
      </DataTemplate> 
     </DataGridTextColumn.HeaderTemplate> 
    </DataGridTextColumn> 
</DataGrid.Columns> 

関連する問題