如何从HeaderTemplate模板中找到DataGridTextColumn?有没有办法只使用XAML执行此操作?我尝试过类型为DataGridTextColumn的FindAncestor,但找不到它。
我知道DataGridTextColumn不是可视化树的一部分。有没有解决方法呢?
答案 0 :(得分: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>
这显示“名称”和标题中的列宽。
答案 1 :(得分:0)
使用find ancestor 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>