【发布时间】:2017-04-07 18:42:33
【问题描述】:
我在 DataGrid 中编写了 DoDragDrop。
但是,由于发生拖动错误,我无法单击并拖动 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"> .....
【问题讨论】:
-
也许您应该验证鼠标位置是否在您的
container的边界内,甚至更好,在DataGridRow而不是DataGrid上注册 mousemove,这样您就可以轻松地开始拖动实际拖动行而不是拖动所选项目并干扰滚动条;)