我正在制作一个UWP应用程序,我正在将一些项目从网格拖到包含ListView的StackPanel中。我的目标是在ListView中显示类别,并通过将拖动到指定类别的网格项重新分类。
我遇到的问题是,当我拖动一个网格项目到一个ListView项目,拖动事件(DragLeave等)不火,我不知道为什么。一般来说,似乎无论我将什么事件关联到ListViewItems,它们都不会触发。我已经启用了CanDrag/CanDrop和事件可以触发到StackPanel,但不是项目本身。
我试过将事件放入DataTemplate, StackPanel本身,我试过使用XAML行为,我试过使用其他事件,如pointerenter。我也试着把它添加到ListViewPresenter,但也没有工作。
我可以确认ListViewItems正在按预期生成,并且我所设置的所有事件只有一行代码将方法的名称打印到调试输出(这在过去为我工作)- Debug. write ("方法名称着火");-当项目被拖过ListViewItems时,不会打印到输出。
<StackPanel
x:Name="dropAreas"
Grid.Row="1"
Grid.RowSpan="3"
Margin="40,40,40,40">
<ListView
x:Name="dropAreasList"
HorizontalAlignment="Stretch"
x:FieldModifier="public"
AllowDrop="True"
ItemsSource="{x:Bind areasForFilter, Mode=OneWay}"
SelectionMode="None">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock
x:Name="dropAreaItemText"
Padding="7,5,7,5"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
CanDrag="True"
DragEnter="SwapArea_Item_DragEnter"
DragLeave="SwapArea_Item_DragLeave"
DragOver="SwapArea_Item_DragOver"
FontSize="16"
PointerEntered="SwapArea_Item_PE"
PointerExited="SwapArea_Item_Px"
Text="{Binding}"
TextWrapping="Wrap" />
</DataTemplate>
</ListView.ItemTemplate>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Margin" Value="10,2,10,2" />
<Setter Property="AllowDrop" Value="True" />
<Setter Property="Background" Value="#FFF5F18E" />
<Setter Property="CornerRadius" Value="10,10,10,10" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<ListViewItemPresenter
DragEnter="SwapArea_Item_DragEnter"
DragLeave="SwapArea_Item_DragLeave"
DragOver="SwapArea_Item_DragOver" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
</ListView>
</StackPanel>
我测试了你的代码,你需要设置AllowDrop="True">为你的ListViewItemPresenter。
更多信息,可以参考官方文档拖放.
<ListViewItemPresenter AllowDrop="True"...>