我正在开发一个 UWP 应用程序,我正在将一些项目从 Grid 拖到包含 ListView 的 StackPanel 中。我的目标是在 ListView 中显示类别,并通过将它们拖动到指定类别来重新分类拖动的 Grid 项目。
我遇到的问题是,当我将 Grid 项目拖到 ListView 项目上时,拖动事件(DragLeave 等)不会触发,我不确定为什么。一般来说,似乎无论我将什么事件关联到 ListViewItems,它们都不会触发。我启用了 CanDrag/CanDrop,事件确实触发到 StackPanel,但不是项目本身。
我试过将事件放入 DataTemplate 中,StackPanel 本身,我试过使用 XAML 行为,我试过使用其他事件,如 PointerEntered。我也试过将它添加到 ListViewPresenter,但这也没有用。
我可以确认 ListViewItems 正在按预期生成,并且我设置的所有事件只有一行代码将方法名称打印到调试输出(过去对我有用)-调试。 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>