选择行时,鼠标拖动的多重选择无法正常工作

时间:2014-02-03 10:33:27

标签: wpf datagrid

在数据网格中,当已经选择了一行时,如果您希望通过拖动来选择连续的行,则在以下方案中不起作用。

enter image description here

2 个答案:

答案 0 :(得分:1)

问题是焦点。虽然选择实际上是行,但请记住每个单元格都是可视对象,并且可以focus编辑。 DataGrid在幕后有处理程序,根据当前具有焦点的单元格更改选择;对于你正在做的事情,除了当你想使用鼠标拖动进行多重选择时,除此之外没有任何问题。因此,您必须在单击第一个单元格后立即从单击的单元格中删除焦点,并且DataGrid的选择已更改。对我有用的是将焦点转移到DataGrid本身。

在XAML中:

<DataGrid x:Name="DataGridTopics" Grid.Row="0" Grid.Column="1" AutoGenerateColumns="False" SelectionChanged="datagridTopic_SelectionChanged" IsReadOnly="True" VerticalAlignment="Top" MouseLeftButtonDown="DataGridTopics_MouseLeftButtonDown" CurrentCellChanged="DataGrid_CurrentCellChanged">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Topics" CanUserSort="False" CanUserResize="False" CanUserReorder="False" Width="*" Binding="{Binding Text}" />
   </DataGrid.Columns>
</DataGrid>

代码背后:

private void DataGrid_CurrentCellChanged(object sender, EventArgs e)
{
    var dg = (DataGrid)sender;
    dg.Focus();
}

答案 1 :(得分:0)

将重点放在CurrentCellChanged上,您将丢失键盘箭头操作(可能还有更多)

此解决方案可保留键盘:

protected override void OnPreviewMouseLeftButtonDown(MouseButtonEventArgs e)
{   
    DataGrid.Focus();
    base.OnPreviewMouseLeftButtonDown(e);
}