C# 如何单击行,而不是WPF数据网格中选定的行

C# 如何单击行,而不是WPF数据网格中选定的行,c#,.net,wpf,xaml,datagrid,C#,.net,Wpf,Xaml,Datagrid,我在XAML中的DataGrid中有一列,如下所示: <DataGridTemplateColumn Header="" Width="35" IsReadOnly="True"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Image Source="{Binding PostIcon}" Stretch="None" MouseDown="

我在XAML中的DataGrid中有一列,如下所示:

<DataGridTemplateColumn Header="" Width="35" IsReadOnly="True">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <Image Source="{Binding PostIcon}" Stretch="None" MouseDown="Post_MouseDown" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
这里的想法是,当您单击数据表中的图像图标时,它会获取您单击的行的索引,找到关联的线程ID,构建URL,然后将您带到那里

除了DataGrid.SelectedItems没有实际捕获单击的内容之外,这一切都是可行的。它捕获单击时选择的内容


这意味着,如果你点击一行,它总是选择你以前点击过的内容,而不是你实际上刚刚点击的内容。如何使它选择我刚才单击的内容?似乎没有明显的“ClickedItem”等同于“SelectedItems”

--解决方案--

感谢AnjumSKhan,我最终采用的完整解决方案如下所示(将变量“dc”移动到显式DataRowView变量):

你试过这个吗:

private void Post_MouseDown(object sender, MouseButtonEventArgs e)
    {
         var dc = (sender as Image).DataContext;
         ...
    }
你试过这个吗:

private void Post_MouseDown(object sender, MouseButtonEventArgs e)
    {
         var dc = (sender as Image).DataContext;
         ...
    }

处理
MouseLeftButtonUp
事件并尝试以下操作:

    private void DataGrid_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        DependencyObject dep = (DependencyObject)e.OriginalSource; 
        while ((dep != null) && !(dep is DataGridRow))
        {
            dep = VisualTreeHelper.GetParent(dep);
        }

        if (dep is DataGridRow)
        {
            DataGridRow row = dep as DataGridRow;
            // do something
        }
    } 

处理
MouseLeftButtonUp
事件并尝试以下操作:

    private void DataGrid_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        DependencyObject dep = (DependencyObject)e.OriginalSource; 
        while ((dep != null) && !(dep is DataGridRow))
        {
            dep = VisualTreeHelper.GetParent(dep);
        }

        if (dep is DataGridRow)
        {
            DataGridRow row = dep as DataGridRow;
            // do something
        }
    } 

“它总是选择您以前单击过的内容,而不是您实际单击过的内容。”,您这是什么意思?在WPF数据网格中,“选择”和“单击”是两个不同的内容。该行为最终导致您可以通过左键单击第3行,然后单击第1行中的元素来“选择”第3行。结果是,当您单击第1行元素时,任何类似onclick的事件都会触发,但当代码查看实际“选中”的内容时,它将从第3行返回结果。“它总是选择您以前单击的内容,而不是您实际刚刚单击的内容。”,这是什么意思?在WPF数据网格中,“选择”和“单击”是两个不同的东西。该行为最终导致您可以通过左键单击第3行,然后单击第1行中的元素来“选择”第3行。结果是,当您单击第1行元素时,任何类似onclick的事件都将触发,但当代码查看实际“选中”的内容时,它将从第3行返回结果。