2017-04-07 44 views
2

DataGridにDoDragDropを書き込みました。wpf DataGrid mouseclick scrollBarでスクロールRowドラッグアンドドロップ時のエラー

ドラッグエラーが発生したため、私はクリックしてDataGridのスクロールバーをドラッグできません。

しかし、私はマウスホイールでスクロールすることができます。

どうすれば修正できますか?ここに私のコードの一部があります。

.csファイルの代わりにデータグリッドの行にあなたのハンドラを登録

private void datagrid_MouseMove(object sender, MouseEventArgs e) 
    { 
     if (e.LeftButton == MouseButtonState.Pressed) 
     { 
      Point currentPosition = e.GetPosition(incidentList); 
      object selectedItem = datagrid.SelectedItem; 
      if (selectedItem != null) 
      { 
       DataGridRow container = (DataGridRow)datagrid.ItemContainerGenerator.ContainerFromItem(selectedItem); 
       var dataObj = new DataObject(); 
       dataObj.SetData("DragSource", container); 
       if (container != null) 
       { 

        DragDrop.DoDragDrop(container, dataObj, DragDropEffects.Copy); 
       } 
      } 
     }    
    } 

の.xamlファイル

<DataGrid x:Name="datagrid" ColumnHeaderStyle="{StaticResource MyColumnHeader}" 
       Style="{DynamicResource DataGridStyle}" CanUserAddRows="False" VerticalAlignment="Stretch" 
       Height="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Grid}}, Path=ActualHeight}" 
       HorizontalAlignment="Stretch" MinHeight="150" SelectionMode="Single" 
       ItemsSource="{Binding myListData, UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="False"    
       SelectedItem="{Binding SelectMyRow}" 
       MouseMove="datagrid_MouseMove"> ..... 
+0

たぶん、あなたは、あなたが痛みを伴わずにドラッグを開始することができますので、代わりにDataGrid' 'の' DataGridRow'上のMouseMoveを登録し、あなたの 'container'あるいはさらに良いの境界内にあることがマウスの位置を確認する必要があります選択した項目をドラッグしてスクロールバーと干渉するのではなく、実際にドラッグされた行); – grek40

答えて

1

ファイル:

<DataGrid> 
    <DataGrid.RowStyle> 
     <Style TargetType="DataGridRow"> 
      <EventSetter Event="MouseMove" Handler="RowMoveHandler"/> 
     </Style> 
    </DataGrid.RowStyle> 

そして取ります送信者行は含まれていますER:

private void RowMoveHandler(object sender, MouseEventArgs e) 
{ 
    var container = sender as DataGridRow; 
    if (container != null && e.LeftButton == MouseButtonState.Pressed) 
    { 
     var dataObj = new DataObject(); 
     dataObj.SetData("DragSource", container); 
     DragDrop.DoDragDrop(container, 
        dataObj, 
        DragDropEffects.Copy); 
    } 
} 
+0

本当にありがとう。それは動作し、私はマウスでscrollBarを使用することができます!しかし、私は行をドラッグを開始しようとすると、selectedRowはドラッグしながら変更されています。それはなぜ変わるのですか? – parfum

+0

@parfumおそらく 'RowMoveHandler'が別の行を移動するときに新しいドラッグを開始する前に現在アクティブなドラッグ操作をチェックしていないためです。 – grek40

+0

編集:それはおそらくそうではありません...あなたはその答えを得るためにあなたのコードについてもっと詳しく述べなければなりません。 – grek40

関連する問題