我在用户控件中设置了一个带有 PreviewMouseDown 事件的 DataGrid。这个想法是,当用户将鼠标移动到单元格中时,它会根据单元格的内容设置要运行的动作,并且无论用户单击哪个鼠标按钮,动作都会运行。
我的事件处理程序(C#):
private void LadderMouseClick(object sender, System.Windows.Input.MouseButtonEventArgs e) {
if (m_ActiveAction != null) {
m_ActiveAction();
}
e.Handled = true;
}
我的数据网格(XAML):
<DataGrid AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserSortColumns="False" EnableRowVirtualization="True" ItemsSource="{Binding Source={StaticResource sourceCollection}}" Name="DataGrid" RowDetailsVisibilityMode="Collapsed" IsReadOnly="True" Height="600" MouseLeave="DataGrid_MouseLeave" MouseEnter="DataGrid_MouseEnter" PreviewMouseDown="LadderMouseClick" PreviewMouseDoubleClick="LadderMouseDoubleClick" VerticalScrollBarVisibility="Hidden" SelectionUnit="Cell" SelectionMode="Single">
这有效,并且当用户在 DataGrid 上单击右键或左键时正确运行该操作。然而,问题是当用户右键单击时,他们的鼠标所在的单元格被选中(单元格周围出现黑色边框);当他们左键单击时不会发生这种情况。
为什么他们的行为不同?他们不应该以同样的方式处理吗?我错过了什么非常简单的东西吗?
提前致谢!
编辑:
到目前为止,我已经尝试过 DataGrid.UnselectAll()、DataGrid.UnselectAllCells()、DataGrid.SelectedIndex = -1 和 DataGrid.CurrentCell = default(DataGridCellInfo)。他们都没有为我工作。
编辑#2:
如果有帮助,我将使用 DataGridTemplateColumns 和 TextBlocks 来显示我的数据。这会导致这种行为吗?
解决方案:Peter Hansen
的建议
解决了这个问题,即向 DataGrid 以及 PreviewMouseDown 事件添加一个 PreviewMouseRightButtonDown 事件。