Использование клавиши CTRL для выбора нескольких строк для перетаскивания перетаскивания из одной сетки данных в другую сетку данных в silveright 4 - PullRequest
0 голосов
/ 07 августа 2011

У меня есть приложение silverlight, разработанное в Silverlight Версия: 4.0.60531.0. На одной странице у меня есть 2 датагрид. Я включил DataGridDragDropTarget для обеих сетей данных.

Если я использую клавишу CTRL для выбора случайных строк и перетаскивания, это не сработает. Пожалуйста, дайте мне знать, что я пропускаю ниже XAML. Заранее спасибо.

Ниже 2 сценариев работает нормально.

  1. Перетащите по одной строке за раз
  2. Используя клавишу SHIFT и выбирая несколько строк, он работает нормально.
    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 Ответ

1 голос
/ 07 августа 2011

Проблема не столько в множественном выборе с помощью клавиши 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, элементы перемещались, а не копировались.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...