2017-04-07 45 views
2

DataGrid에서 DoDragDrop을 작성했습니다.wpf DataGrid mouseclick으로 스크롤하십시오. scrollBar 행 드래그 앤 드롭시 오류가 발생했습니다.

그러나 드래그 오류가 발생했기 때문에 DataGrid에서 스크롤 막대를 끌거나 끌 수 없습니다.

하지만 마우스 휠로 스크롤 할 수 있습니다.

어떻게 해결할 수 있습니까? 여기 내 코드의 일부입니다.

.cs은

<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

은 어쩌면 당신은, 당신의'container'의 경계 또는 더 나은 내에서 될 수있는 마우스 위치를 확인하면 고통없이에 드래그를 시작할 수 있도록 대신 DataGrid''의 DataGridRow''에 MouseMove 이벤트를 등록해야 선택한 항목을 드래그하고 스크롤바를 사용하는 대신 실제로 끌린 행을;) – grek40

답변

1

대신 데이터 그리드의 행에 핸들러를 등록 파일 .xaml

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); 
       } 
      } 
     }    
    } 

파일 : 걸릴 다음

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

그리고 발신자 행 포함 어 :

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