2017-05-23 2 views
0

Ich habe eine XAML-Datei, die es ermöglichen sollte, GridViewItems in eine GridView zu ziehen. Jetzt verwende ich eine ItemSource für die GridView-Elemente und eine DataTemplate, um sie so anzuzeigen, wie sie angezeigt werden sollen. Das funktioniert. Folgendes Problem ist aufgetreten: Seit ich DataTemplate verwendet habe, sind die GridViewItems nicht mehr ziehbar. Ich kann das DataTemplate nur ziehen. Das ist seltsam, so dass der einzige Teil, den ich zum Ziehen verwenden kann, der Bereich links und rechts von den GridViewItems ist, da dies für den Rand verwendet wird.Wie kann ich ein GridViewItem als ein ziehbares Objekt anstelle eines DataTemplate in XAML erstellen?

Warum ist das DataTemplate das 'ziehbare' Steuerelement anstelle des GridViewItem? Ich habe zahlreiche Korrekturen ausprobiert, aber keine scheint gut zu funktionieren. Ich kann natürlich ohne ein DataTemplate arbeiten, aber es ist viel sauberer, es so zu benutzen.

 <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> 

Vielen Dank im Voraus!

Antwort

1

Wenn Sie GridViewItem in DataTemplate hinzufügen, gibt es zwei ListViewItemPresenter in einem GridViewItem. Bitte überprüfen Sie es im Live Visual Tree.

In UWP-Anwendungen für Windows 10 verwenden ListViewItem und GridViewItem ListViewItemPresenter; Der GridViewItemPresenter ist veraltet und sollte nicht verwendet werden. ListViewItem und GridViewItem legen unterschiedliche Eigenschaftenwerte für ListViewItemPresenter fest, um unterschiedliche Standardansichten zu erzielen.

Weitere Informationen finden Sie unter Item containers and templates.

Wenn Sie Margin zum GridViewItem setzen wollen, sollten wir in der Lage sein, den GridViewItem Stil im GridView.ItemContainerStyle einzustellen.

Zum Beispiel:

<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> 
Verwandte Themen