我正在使用Windows社区工具包WinUI DataGrid控件。我想在单击一行时运行一些代码。我怎么能这么做?
我试过:
SelectionChanged事件:只有在第一次单击行时才能工作,就像在选择相同的行之后。如果通过键盘移动到行,也会触发。CurrentCellChanged事件:只在第一次单击单元格时工作,因为单击相同的单元格后不会更改当前单元格。(我无法找到以编程方式清除当前单元格的方法。)有什么想法吗?
发布于 2021-12-21 20:29:46
最后我使用了PointerReleased事件。(以前我已经放弃了这个事件,因为我无法确定单击了哪一行。)
<ctWinUI:DataGrid
PointerReleased="dgDesktops_PointerReleased"
...>为了找到被点击的DataGridRow,我遍历了可视化树:
private async void dgDesktops_PointerReleased(object sender, PointerRoutedEventArgs e)
{
DataGridRow clickedRow = ViewUtils.FindParent<DataGridRow>((UIElement)e.OriginalSource);
if (clickedRow != null)
{
MyModel rowModel = (MyModel)clickedRow.DataContext;
// Do stuff
}
}
public static T FindParent<T>(DependencyObject childElement) where T : Control
{
DependencyObject currentElement = childElement;
while (currentElement != null)
{
if (currentElement is T matchingElement)
{
return matchingElement;
}
currentElement = VisualTreeHelper.GetParent(currentElement);
}
return null;
}不是最优雅的解决方案,但它有效:)
https://stackoverflow.com/questions/70429745
复制相似问题