我在Silverlight版本中开发了silverlight应用程序:4.0.60531.0。在一个页面中,我有2个数据网格。我为这两个datagrids启用了DataGridDragDropTarget。
如果我使用CTRL键选择随机行并拖放,则无效。请让我知道我在xaml下面缺少的东西。提前谢谢。
在2个场景中,它运行正常。
xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
xmlns:tk="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.Toolkit"
<tk:DataGridDragDropTarget AllowDrop="True" Grid.Row="0" HorizontalAlignment="Left" VerticalContentAlignment="Stretch" HorizontalContentAlignment="Center" >
<sdk:DataGrid x:Name="d1" ItemsSource="{Binding}" AutoGenerateColumns="False" SelectionMode="Extended">
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn Header="Number" IsReadOnly="True" Binding="{Binding Path=No}" />
<sdk:DataGridTextColumn Header="Name" IsReadOnly="True" Binding="{Binding Name}" />
</sdk:DataGrid.Columns>
</sdk:DataGrid>
</tk:DataGridDragDropTarget>
<tk:DataGridDragDropTarget AllowDrop="True" Grid.Row="1" HorizontalAlignment="Left" VerticalContentAlignment="Stretch" HorizontalContentAlignment="Center" >
<sdk:DataGrid x:Name="d2" Height="100" Grid.Row="1" SelectionMode="Extended" ItemsSource="{Binding}" AutoGenerateColumns="False">
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn Header="Number" IsReadOnly="True" Binding="{Binding Path=No}" />
<sdk:DataGridTextColumn Header="Name" IsReadOnly="True" Binding="{Binding Name}" />
</sdk:DataGrid.Columns>
</sdk:DataGrid>
</tk:DataGridDragDropTarget>
答案 0 :(得分:1)
问题不在于使用Ctrl键进行多次选择。如果在拖放操作期间释放Ctrl键,您会发现拖放操作成功完成。这更像是在按住Ctrl的同时删除项目。显然,这表示您要复制项目而不是移动它们。
我不知道有任何文档支持我,但我确实在内部类(Microsoft.Windows.DragOperation,方法GetDragDropEffects)的文档注释中找到了以下内容:
/// <summary>
/// Returns the allowed effects by analyzing the state of the keys
/// pressed. If the control key is pressed the user is requesting a
/// copy. If copy is available the effect will be only copy, if not
/// available the effect will be None.
/// </summary>
我将属性AllowedSourceEffects="Copy"
添加到了两个DataGridDragDropTargets,然后我发现拖放功能完全停止了。但是,当我将这些属性更改为AllowedSourceEffects="Copy,Move"
时,我发现拖放再次起作用,包括当我按住Ctrl键时。但是,即使我按住Ctrl键,项目也会移动而不是复制。