在数据网格中,当已经选择了一行时,如果您希望通过拖动来选择连续的行,则在以下方案中不起作用。
答案 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);
}