当我将事件添加到 DataTemplate 或其他地方时,为什么我的 Drag 事件没有被触发?

问题描述 投票:0回答:1

我正在开发一个 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>
c# user-interface uwp
1个回答
0
投票

我测试了你的代码,你需要为你的 TextBlock 设置 AllowDrop="True"

更多信息可以参考官方文档拖拽.

<TextBlock  AllowDrop="True".../>
© www.soinside.com 2019 - 2024. All rights reserved.