C# WPF DataGrid-查找已单击项的列
我有一个在标题中带有复选框的Datagrid。 单击复选框时,我想知道其列的索引。我在谷歌上找到的只是被点击的单元格,而不是标题项。即使我在调试时看到dep是DataGridColumnHeader,while循环也不会退出 Xaml:C# WPF DataGrid-查找已单击项的列,c#,wpf,xaml,datagrid,C#,Wpf,Xaml,Datagrid,我有一个在标题中带有复选框的Datagrid。 单击复选框时,我想知道其列的索引。我在谷歌上找到的只是被点击的单元格,而不是标题项。即使我在调试时看到dep是DataGridColumnHeader,while循环也不会退出 Xaml: <DataGridTemplateColumn> <DataGridTemplateColumn.HeaderTemplate> <DataTemplate> <Stack
<DataGridTemplateColumn>
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<StackPanel Margin="0,-7,0,0" Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center">
<CheckBox Margin="0,0,5,0" IsChecked="{Binding DataContext.Day1Cb, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" Click="HeaderCheckBox_Click"></CheckBox>
<TextBlock Text="{x:Static resx:Bla.Day1}"></TextBlock>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical">
<TextBlock Text="{Binding Path=Day1}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
谢谢通过使用此代码,您是否能够获得选中的单元格?如果复选框位于行单元格中,则此代码有效。因为在这种情况下,它在标题中,所以不起作用。但是从您的代码来看,它似乎在单元格中。您为什么不使用
sender
而不是e.OriginalSource
,看看这是否能得到所需的结果。
private void HeaderCheckBox_Click(object sender, RoutedEventArgs e)
{
DependencyObject dep = (DependencyObject)e.OriginalSource;
while ((dep != null) && !(dep is DataGridColumnHeader))
{
dep = VisualTreeHelper.GetParent(dep);
}
if (dep == null)
return;
if (dep is DataGridColumnHeader)
{
DataGridColumnHeader columnHeader = dep as DataGridColumnHeader;
// do something
}
int columnIndex = NavDataGrid.Columns.Single(c => c == dep).DisplayIndex;
}