【问题标题】:Drop Event is Not Firing in UWP XAML(Windows 10)在 UWP XAML(Windows 10)中未触发 Drop 事件
【发布时间】:2015-10-26 08:46:04
【问题描述】:

我正在为 WIndows 10 开发一个应用程序,我想在两个列表中实现拖放功能。但 Windows 10 应用程序中的 Drop 事件未触发。 以前它是为 Windows 8.1 工作的。 以下是我的代码:

<ListView Grid.Row="1" x:Name="TasksList" SelectionMode="None" HorizontalAlignment="Stretch" 
    ScrollViewer.VerticalScrollBarVisibility="Hidden" IsItemClickEnabled="True" 
    VerticalAlignment="Stretch" 
    ItemsSource="{Binding Tasks}"  ScrollViewer.VerticalScrollMode="Enabled" 
    CanReorderItems="True"  ShowsScrollingPlaceholders="False"
    DragItemsStarting="GridViewDragItemsStarting"  AllowDrop="True" IsSwipeEnabled="False"
    Drop="GridViewDrop" DragEnter="TasksList_DragEnter" CanDragItems="True"
    ItemContainerStyle="{StaticResource ClientListViewItemStyle}" >
    <ListView.ItemTemplate>
        <DataTemplate>
            <Border BorderThickness="0,0,0,1" BorderBrush="{StaticResource MydesqBorderBrush}" Padding="10">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>
                    <Grid Grid.Column="0" Width="80" Height="60" Background="{Binding DueDateIndicatorColor,Converter={StaticResource HexToSolidColorBrushConverter}}" VerticalAlignment="Top" HorizontalAlignment="Center">
                        <Image x:Name="ImgClient" Source="{Binding Client.ClientPictureUrl,Converter={StaticResource ServerUrlConverter}}" Stretch="Fill" Visibility="{Binding Source, Converter={StaticResource NullToInvisibilityConverter}, ElementName=ImgClient}" Width="80" Height="60"/>
                        <Image x:Name="ImgAccount" Source="{Binding ImageUrl}" Width="35" Height="35" Visibility="{Binding Source, Converter={StaticResource NullToInvisibilityConverter}, ElementName=ImgAccount}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
                    </Grid>
                    <Grid Grid.Column="1" Margin="10,0,0,0">
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition Height="Auto"/>
                        </Grid.RowDefinitions>
                        <TextBlock Text="{Binding TaskTitle}" Grid.Row="0" VerticalAlignment="Center" HorizontalAlignment="Left" FontSize="20" Foreground="{Binding TitleColor, Converter={StaticResource HexToSolidColorBrushConverter}}"/>
                        <StackPanel Grid.Row="1" Orientation="Horizontal">
                            <Image  Width="20" Height="20" VerticalAlignment="Center" Source="/Assets/Images/user_gray.png" Margin="0,0,10,0"/>
                            <TextBlock Text="{Binding TaskType}" FontSize="16" VerticalAlignment="Center" Foreground="{Binding SubTitleColor, Converter={StaticResource HexToSolidColorBrushConverter}}" Margin="5,0,0,0"/>
                        </StackPanel>
                        <StackPanel Grid.Row="2" Orientation="Horizontal">
                            <Image Width="20" Height="20" VerticalAlignment="Center" Source="/Assets/Images/calendar_gray.png" Margin="0,0,10,0"/>
                            <TextBlock Text="{Binding DueDate, ConverterParameter=\{0:dd.MM.yyyy\}, Converter={StaticResource DateToStringConverter}}"  FontSize="16" VerticalAlignment="Center" Foreground="{Binding SubTitleColor, Converter={StaticResource HexToSolidColorBrushConverter}}" Margin="5,0,0,0"/>
                        </StackPanel>
                    </Grid>
                </Grid>
            </Border>
        </DataTemplate>
    </ListView.ItemTemplate>
    <Interactivity:Interaction.Behaviors>
        <Core:EventTriggerBehavior EventName="ItemClick">
            <behaviors:NavigateWithEventArgsToPageAction 
            TargetPage="Mydesq.Client.UWP.Views.AddTaskPage"
             EventArgsParameterPath="ClickedItem" />
        </Core:EventTriggerBehavior>
        <Core:EventTriggerBehavior EventName="Drop">
            <Core:InvokeCommandAction Command="{Binding DropTaskCommand}" CommandParameter="{Binding ElementName=TasksList,Path=SelectedItem}"/>
        </Core:EventTriggerBehavior>
    </Interactivity:Interaction.Behaviors>
</ListView>

【问题讨论】:

  • “TasksList_DragEnter”事件中有什么?您应该在 DragEventArgs 上设置 AcceptedOperation,例如像这样:e.AcceptedOperation = Windows.ApplicationModel.DataTransfer.DataPackageOperation.Copy.
  • 谢谢,它正在工作
  • 太棒了!我把它作为答案发布了。如果你不介意,请接受它。

标签: xaml windows-10 uwp


【解决方案1】:

确保在 ListView 的 DragEnter 事件中设置 AcceptedOperation 属性。例如。像这样:

private void TasksList_DragEnter(object sender, DragEventArgs e)
{
   e.AcceptedOperation = Windows.ApplicationModel.DataTransfer.DataPackageOperation.Copy;
}

【讨论】:

  • 很好的答案!你拯救了我的一天
【解决方案2】:

我在MainPage 中遇到了与Grid 类似的问题

 AllowDrop="True" 

即使没有 DragEnter 事件也已修复。

(我知道你已经有了这个属性(我的回答是给别人的……))

【讨论】: