Wpf 从标头模板中查找DataGridColumn

Wpf 从标头模板中查找DataGridColumn,wpf,xaml,data-binding,Wpf,Xaml,Data Binding,如何从HeaderTemplate模板中找到DataGridTextColumn?是否有一种仅使用XAML执行此操作的方法?我尝试了DataGridTextColumn类型的FindAncestor,但找不到它 我知道DataGridTextColumn不是可视化树的一部分。有什么解决方法吗?您真的需要整个column对象吗?DataContext将是作为标头传入的任何内容,例如 <DataGridTextColumn Header="Name" Binding="{Binding Nam

如何从HeaderTemplate模板中找到DataGridTextColumn?是否有一种仅使用XAML执行此操作的方法?我尝试了DataGridTextColumn类型的FindAncestor,但找不到它


我知道DataGridTextColumn不是可视化树的一部分。有什么解决方法吗?

您真的需要整个column对象吗?DataContext将是作为标头传入的任何内容,例如

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

这将显示标题中的名称和列宽。

使用查找祖先works在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>

你能给我们一个例子,说明你试图对这个列做什么,以及你试图从XAML中的什么地方访问它吗?
<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>