我知道这看起来很简单,我也是这么想的,但事实并非如此。我有一个GridView,SelectionMode="Single",我只想通过单击它来取消选择所选项目。问题是,当你选择一个已经选择的项目时,SelectionChanged不会触发。我已经尝试在每个SelectionChanged上设置一个等于GridView的SelectedIndex的int,然后检查Grid_Tapped,看看PreviousSelectedIndex是否为CurrentlySelectedIndex,但SelectionChanged事件在Grid_Tappeed之前激发纳秒,所以它不起作用。有什么想法吗?
我认为与其延迟,不如使用以下内容:
Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => gridView.SelectedItem = null);
是的,这是一个有点奇怪的默认行为,您可以使用以下技巧来解决(有很多方法)
1.-XAML
<GridView IsItemClickEnabled="True" ItemClick="IconGridView_ItemClick" SelectionMode="Single">
2.-事件代码:
private async void IconGridView_ItemClick(object sender, ItemClickEventArgs e)
{
var gridView = sender as GridView;
if (e.ClickedItem == gridView.SelectedItem)
{
await Task.Delay(100);
gridView.SelectedItem = null;
}
}
如果您不等待一点,内部事件会保留所选项目,这样它就会被解决,SelectedItem就会被取消选择。
使用CellClick
事件。
例如,private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
、e.RowIndex
保存单击的单元格的索引。您所要做的就是检查这个索引是否等于SelectedIndex
。