我在一个UWP应用程序上工作,在那里我将一些项目从网格拖到包含ListView的StackPanel中.我的目标是在ListView中显示类别,并通过将拖动的网格项拖到指定的类别来对它们进行重新分类.

我遇到的问题是,当我将网格项拖到ListView项上时,拖动事件(DragLeave等)不会触发,我不确定原因.一般来说,似乎无论我将什么事件与ListViewItems相关联,它们都不会触发.我已经启用了CanDrag/CanDrop,事件确实会在StackPanel上触发,但不会触发项目本身.

我try 将事件放入DataTemplate、StackPanel本身,try 使用XAML行为,并try 使用其他事件,如PointerEntered.我也曾try 将其添加到ListViewPresenter中,但也没有成功.

我可以确认ListViewItems正在按预期生成,并且我设置的所有事件只有一行代码将方法的名称打印到Debug输出(这在过go 对我很有效)-Debug.Wite("方法名称激发");-当项被拖动到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>

推荐答案

我测试了您的代码,您需要为ListViewItemPresenter设置AllowDrop="True".

有关更多信息,您可以参考官方文档100.

<ListViewItemPresenter AllowDrop="True"...>

Csharp相关问答推荐

System. InvalidOperationException:无法将数据库中的字符串值i转换为映射的ItemType枚举中的任何值''''

程序集.加载从exe的异常

try 在Blazor项目中生成html

在C#中使用类中的对象值

当通过Google的Gmail Api发送邮件时,签名会产生dkim = neutral(正文散列未验证)'

创建临时Collection 最有效的方法是什么?堆栈分配和集合表达式之间的区别?

为什么EventInfo.EventHandlerType返回可为空的Type值?

C#和ASP.NET核心标识:提高GetUserAsync调用的性能

如何在NET 8最小API中自动记录TypedResults.Stream响应

如何将端点(或с匹配请求并判断其路径)添加到BCL?

有没有类似于扩展元素的合并元组的语法?

Google OAuth令牌交换在.Net中不起作用

在C#ASP.NET内核中使用INT AS-1进行控制器场景的单元测试

用于获取字符串的最后12个字符的正则表达式(空格除外)

如何从Azure函数使用Graph API(SDK 5.35)中的[FindMeetingTimes]

为什么我的自定义Json.net转换器不工作?

Xamarin.Forms中具有类似AspectFill的图像zoom 的水平滚动视图

Xamarin Forms应用程序中登录页面的用户名和密码编辑文本之间不需要的空格

最小API定义的Swagger标头参数

如何将行添加到DataGrid以立即显示它?