Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 8 拖放;在Windows 8应用商店应用程序(C#)中使用触摸手势拖放可变大小的WrapGrid项目_Windows 8_Windows Store Apps_Winrt Xaml - Fatal编程技术网

Windows 8 拖放;在Windows 8应用商店应用程序(C#)中使用触摸手势拖放可变大小的WrapGrid项目

Windows 8 拖放;在Windows 8应用商店应用程序(C#)中使用触摸手势拖放可变大小的WrapGrid项目,windows-8,windows-store-apps,winrt-xaml,Windows 8,Windows Store Apps,Winrt Xaml,更新: 我通过支持渠道收到MS的回复,即当ItemPanelTemplate是VariableSizeWrapGrid时,目前不可能支持触摸重新排序,因为它缺少实现触摸重新排序所需的一些接口。 作为前言(并消除任何误解),我确实具备使用鼠标所需的功能。我所需要的就是通过触摸手势实现相同的功能 要求: 1.在可水平滚动的容器中显示一组项目,每个项目可以是半高或全高。应该可以通过在新位置拖放来重新排列它们。 2.为用户提供一种取消选择以前选择的项目的方法(与使用鼠标右键单击的效果相同) 我当前的代码

更新: 我通过支持渠道收到MS的回复,即当ItemPanelTemplate是VariableSizeWrapGrid时,目前不可能支持触摸重新排序,因为它缺少实现触摸重新排序所需的一些接口。

作为前言(并消除任何误解),我确实具备使用鼠标所需的功能。我所需要的就是通过触摸手势实现相同的功能

要求: 1.在可水平滚动的容器中显示一组项目,每个项目可以是半高或全高。应该可以通过在新位置拖放来重新排列它们。 2.为用户提供一种取消选择以前选择的项目的方法(与使用鼠标右键单击的效果相同)

我当前的代码:

XAML(为清晰起见略微简化)

我尝试过各种各样的布局控件组合(例如取消外部ScrollViewer或StackPanel,或用网格替换),但没有一种支持正确的水平滚动或项目大小调整。将GridView.ItemsPanel从VariableSizedWrapGrid切换到just WrapGrid也没有帮助

请注意以下标志的组合: IsSweepEnabled=“True”CanDragItems=“True”CanReorderItems=“True”AllowDrop=“True”IsItemClickEnabled=“False”。
这就是鼠标d&d的工作原理,但触摸d&d或取消选择仍然没有成功。

除非
项资源
绑定到
可观察集合
,并且
可以重新排序项
CanDragItems
AllowDrop
设置为
,否则无法对
网格视图重新排序。无需使用
CollectionViewSource
gridview
中启用重新排序。事实上,
collectionviewsource
通常用于对
gridview
进行分组,并且在分组数据时无法重新排序

无论如何,您的XAML将如下所示:

<Grid Background="Black">
    <Grid.DataContext>
        <local:MyModel/>
    </Grid.DataContext>
    <GridView CanReorderItems="True" CanDragItems="True" AllowDrop="True"
              ItemsSource="{Binding Items}">
    </GridView>
</Grid>

尽管任何
可枚举的
都可以绑定到
网格视图的
项源
,但它只是一个
可观察集合
,支持重新排序。是的,您可以使用实现重新排序的自定义类型,但是当
observetecollection
为您执行此操作时,为什么还要处理它呢

这是我回答中的一个片段

不要气馁。这比看起来容易


祝你好运

你看到这个了吗?Xyroid:这与我引用的GridViewEx的源代码相同。不幸的是,它的功能与其相似,但并不完全相同,我无法找出增量的哪一部分导致我的解决方案对手势不响应:-(我在这里讨论了一个类似的问题:。在我的情况下,将HorizontalScrollMode属性设置为Disabled会导致刷卡不起作用。最后,我被迫在GridView上启用HorizontalScrollMode。(这可能与您的情况无关。)标记正确的答案是礼貌的。杰瑞,我是你博客的忠实粉丝,对你只有深深的敬意。但是你的答案是……我应该如何把它……放到一个不同的问题上。当然,我的文章一定会被收集到。而且我不相信我提到了CollectionViewSourse。所以,虽然你的答案名义上是正确的,但我认为你的答案是正确的it’这不是我问题的答案。因此,恕我直言,我不会认为你的答案是正确的。因为它不是,而不是因为我不礼貌:——)
    protected override void PrepareContainerForItemOverride(Windows.UI.Xaml.DependencyObject element, object item)
    {
        try
        {
            Item d = item as Item;
            if (d != null)
            {
                element.SetValue(VariableSizedWrapGrid.RowSpanProperty, d.Size == PossibleSizes.Half ? 1 : 2);
            }
        }
        catch
        {
            element.SetValue(VariableSizedWrapGrid.RowSpanProperty, 2);
        }
        finally
        {
            base.PrepareContainerForItemOverride(element, item);
        }
    }
<Grid Background="Black">
    <Grid.DataContext>
        <local:MyModel/>
    </Grid.DataContext>
    <GridView CanReorderItems="True" CanDragItems="True" AllowDrop="True"
              ItemsSource="{Binding Items}">
    </GridView>
</Grid>