如何将GridViewItem作为可拖动对象而不是XAML中的DataTemplate?

时间:2017-05-23 09:35:52

标签: c# xaml uwp

我有一个XAML文件,可以在GridView中拖动GridViewItems。现在我正在为GridView项目使用ItemSource,并使用DataTemplate以我希望它们显示的方式显示它们。这样可行。发生以下问题:自从我开始使用DataTemplate以来,GridViewItems不可拖动。我只能拖动DataTemplate。这很奇怪,因此我可以用来拖动的唯一部分是GridViewItems的左右区域,因为它用于边距。

为什么DataTemplate是'draggable'控件而不是GridViewItem?我已经尝试了很多修复工具,但似乎都没有成功。我可以在没有DataTemplate的情况下使其工作,但是使用它会更加清晰。

        <GridView Name="canvas" ItemsSource="{Binding GridviewItemList}" CanReorderItems="{Binding CanvasCanReorder}" CanDragItems="{Binding CanvasCanDrag}" ReorderMode="Enabled" AllowDrop="True" VerticalAlignment="Center" Width="660" Height="110" IsSwipeEnabled="False" ScrollViewer.VerticalScrollMode="Disabled" ScrollViewer.HorizontalScrollMode="Disabled">
        <GridView.ItemTemplate>
            <DataTemplate x:DataType="local:MainPageItems">
                <GridViewItem Name="{x:Bind GvName}" Margin="13 0 15 0">
                    <Border Width="100" Height="100" Background="{x:Bind BdBackground, Mode=OneWay}">
                        <TextBlock Height="60" Width="30" FontSize="40" Text="{x:Bind TbText, Mode=TwoWay}" Margin="{x:Bind TbMargin, Mode=TwoWay}"></TextBlock>
                    </Border>
                </GridViewItem>
            </DataTemplate>
        </GridView.ItemTemplate>
        <interactivity:Interaction.Behaviors>
            <core:EventTriggerBehavior EventName="DragItemsCompleted">
                <core:InvokeCommandAction Command="{Binding CanvasDragCompleted}"></core:InvokeCommandAction>
            </core:EventTriggerBehavior>
        </interactivity:Interaction.Behaviors>
    </GridView>

提前致谢!

1 个答案:

答案 0 :(得分:1)

GridViewItem中添加DataTemplate时,一个ListViewItemPresenter中有两个GridViewItem。请在Live Visual Tree中查看。

  

在Windows 10的UWP应用程序中,ListViewItem和GridViewItem都使用ListViewItemPresenter;不推荐使用GridViewItemPresenter,您不应该使用它。 ListViewItem和GridViewItem在ListViewItemPresenter上设置不同的属性值,以实现不同的默认外观。

有关详细信息,请参阅Item containers and templates

如果您想将Margin设置为GridViewItem,我们应该可以在GridViewItem中设置GridView.ItemContainerStyle样式。

例如:

 <GridView Name="canvas" ItemsSource="{Binding GridviewItemList}" CanReorderItems="{Binding CanvasCanReorder}" CanDragItems="{Binding CanvasCanDrag}" ReorderMode="Enabled" AllowDrop="True" VerticalAlignment="Center" Width="660" Height="110" IsSwipeEnabled="False" ScrollViewer.VerticalScrollMode="Disabled" ScrollViewer.HorizontalScrollMode="Disabled">
     <GridView.ItemTemplate>
         <DataTemplate x:DataType="local:MainPageItems">
             <Border Width="100" Height="100" Background="{x:Bind BdBackground, Mode=OneWay}">
                 <TextBlock Height="60" Width="30" FontSize="40" Text="{x:Bind TbText, Mode=TwoWay}" Margin="{x:Bind TbMargin, Mode=TwoWay}"></TextBlock>
             </Border>
         </DataTemplate>
     </GridView.ItemTemplate>
     <GridView.ItemContainerStyle>
         <Style TargetType="GridViewItem">
             <Setter Property="Margin" Value="13 0 15 0"/>
         </Style>
     </GridView.ItemContainerStyle>
     <interactivity:Interaction.Behaviors>
         <core:EventTriggerBehavior EventName="DragItemsCompleted">
             <core:InvokeCommandAction Command="{Binding CanvasDragCompleted}"></core:InvokeCommandAction>
         </core:EventTriggerBehavior>
     </interactivity:Interaction.Behaviors>
 </GridView>