Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF DataGrid-查找已单击项的列_C#_Wpf_Xaml_Datagrid - Fatal编程技术网

C# WPF DataGrid-查找已单击项的列

C# WPF DataGrid-查找已单击项的列,c#,wpf,xaml,datagrid,C#,Wpf,Xaml,Datagrid,我有一个在标题中带有复选框的Datagrid。 单击复选框时,我想知道其列的索引。我在谷歌上找到的只是被点击的单元格,而不是标题项。即使我在调试时看到dep是DataGridColumnHeader,while循环也不会退出 Xaml: <DataGridTemplateColumn> <DataGridTemplateColumn.HeaderTemplate> <DataTemplate> <Stack

我有一个在标题中带有复选框的Datagrid。 单击复选框时,我想知道其列的索引。我在谷歌上找到的只是被点击的单元格,而不是标题项。即使我在调试时看到dep是DataGridColumnHeader,while循环也不会退出

Xaml:

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