使用CTRL键选择多行以从Silverlight 4中的一个数据网格拖放到另一个数据网格

时间:2011-08-07 13:44:05

标签: silverlight-4.0

我在Silverlight版本中开发了silverlight应用程序:4.0.60531.0。在一个页面中,我有2个数据网格。我为这两个datagrids启用了DataGridDragDropTarget。

如果我使用CTRL键选择随机行并拖放,则无效。请让我知道我在xaml下面缺少的东西。提前谢谢。

在2个场景中,它运行正常。

  1. 一次拖动一行
  2. 使用SHIFT键并选择多行,它正常工作。
  3.     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>
    

1 个答案:

答案 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键,项目也会移动而不是复制。