2017-05-23 72 views
0

我有一个XAML文件,它应该可以在GridView中拖动GridViewItems。现在我为GridView项目和一个DataTemplate使用ItemSource,以我希望显示它们的方式显示它们。这样可行。发生以下问题:自从我开始使用DataTemplate后,GridViewItems无法拖动。我只能拖动DataTemplate。这很奇怪,所以我可以用来拖动的唯一部分是GridViewItem的左侧和右侧区域,因为这用于保证金。如何使GridViewItem作为可拖动对象而不是XAML中的DataTemplate?

为什么DataTemplate是“可拖动”控件而不是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

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

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

欲了解更多信息,请参阅Item containers and templates

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

例如:

<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> 
相关问题