Win RT Xaml GridView:拖动选择多个项目

时间:2016-03-09 11:40:35

标签: xaml gridview winrt-xaml win-universal-app

我试图通过用鼠标按下鼠标悬停在GridView中来选择多个项目(如绘图)。我尝试使用PointerEntered事件实现此目的,但我无法从代码中更改选择。有没有办法实现自定义选择模式?

这对我不起作用,因为我无法在Win RT XAML中使用Style.Triggers: https://stackoverflow.com/a/2886223/5739170

2 个答案:

答案 0 :(得分:1)

您必须继承gridview控件并覆盖PrepareContainerForItemOverride方法:

代码:

public class MyGridView : GridView
{

    protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
    {
        (element as GridViewItem).PointerMoved += MyGridView_PointerMoved;

        base.PrepareContainerForItemOverride(element, item);
    }

    private void MyGridView_PointerMoved(object sender, PointerRoutedEventArgs e)
    {

 //your logic for setting the isselected
         (sender as GridViewItem).IsSelected = true;
    }
}

答案 1 :(得分:1)

这是我最终根据Chirag Shah的回答实现的:

class MyGridView : GridView
{
    protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
    {
        (element as GridViewItem).PointerEntered += SelectItemOnEntered;
        (element as GridViewItem).AddHandler(PointerPressedEvent, new PointerEventHandler(SelectItemOnPressed), true);
        base.PrepareContainerForItemOverride(element, item);
    }

    private void SelectItemOnPressed(object sender, PointerRoutedEventArgs e)
    {
        (sender as GridViewItem).IsSelected = !(sender as GridViewItem).IsSelected;
    }

    private void SelectItemOnEntered(object sender, PointerRoutedEventArgs e)
    {
        if (e.Pointer.IsInContact)
            (sender as GridViewItem).IsSelected = !(sender as GridViewItem).IsSelected;
    }
}

我希望这可以帮助每个想要实现这种选择模式的人。