我正在使用Windows 社區工具包 WinUI DataGrid 控制元件。我想在單擊一行時運行一些代碼。我怎樣才能做到這一點?
我努力了:
SelectionChanged事件:僅在第一次單擊該行時有效,因為此后正在選擇同一行。如果行通過鍵盤移動到,也會被觸發。CurrentCellChanged事件:僅在第一次單擊單元格時有效,因為在單擊同一單元格之后不會更改當前單元格。(而且我找不到以編程方式清除當前單元格的方法。)- 像這樣的答案顯示了如何通過 WPF 中的樣式添加行事件處理程式,但這在 WinUI 中不起作用。
有任何想法嗎?
uj5u.com熱心網友回復:
我最終使用了該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://www.uj5u.com/qukuanlian/402160.html
標籤:C# xaml 数据网格 Windows 社区工具包 winui-3
上一篇:Xamarin--使用Syncfusion的SfPopupLayout時,在視圖模型中設定值后,單選按鈕視覺狀態不會更新
