如何覆盖 UWP 中控件对触摸的默认响应?

How to override the default response to a touch for a control in UWP?

是否可以覆盖 UWP 中控件对触摸交互的响应?例如,对于 DataGrid XAML control,点击一行时的默认行为是 select 该行,并删除 select 所有其他 select 行。是否可以更改为将点击的行添加到 selection 就像按下控制键一样?

编辑:我的解决方案适用于平板电脑模式下的 Surface Pro,因此用户只能通过触摸与应用程序交互。所以我希望他能够仅使用触摸 select 多个项目。在我添加的图像中,如果用户单击“Chicken Sandwich”,则默认行为是删除select“Burger”和select“Chicken Sandwich”,除非按住 CTRL 键。然而,在没有鼠标和键盘的 Surface 设备上使用 CTRL 键意味着我们将需要显示屏幕键盘,这会有点麻烦。相反,我想更改默认行为,如果用户单击未 selected 项目,它将添加到 selection,如果他单击 selected 项目,则该项目它从 selection 中删除(在下面的示例中,“鸡肉三明治”将在第一次触摸时添加到 selection 中,并在第二次点击时从 selection 中删除),所以基本上与按住 CTRL 键但不使用它的功能相同。

基于 documentDataGrid class 提供了在按住 SHIFT 或 [= 的同时选择多个项目的行为21=]CTRL 选择期间的键。您需要做的只是将 SelectionMode 属性 设置为 Extended.

更新:

请检查以下代码作为示例:

List<object> selectedItems = new List<object>();
bool flag = false;

private void dataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if(flag==false)
    {
        var item = dataGrid.SelectedItem;
        if (selectedItems.Contains(item))
        {
            selectedItems.Remove(item);
        }
        else
        {
            selectedItems.Add(item);
        }

        flag = true;
        dataGrid.SelectedItems.Clear();
        foreach(var cur in selectedItems)
        {
            flag = true;
            dataGrid.SelectedItems.Add(cur);
        }
    }
    else
    {
        flag = false;
    }
}