我有一个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>
提前致谢!
答案 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>