2011-11-09 39 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> 

這將導致帶有文本「名稱」的紅色標題。

如果你確實需要的列中,您可以使用一個ElementName結合:

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

這說明「名稱」,並在報頭中的列寬。

0

使用查找祖先工作,通過datagrid中的索引訪問列。

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