Tôi có một DataGrid được thiết lập với sự kiện PreviewMouseDown trong Điều khiển người dùng. Ý tưởng là khi người dùng di chuyển chuột của họ vào một ô, nó sẽ đặt Hành động để chạy dựa trên nội dung của ô và Hành động sẽ chạy khi người dùng nhấp, bất kể nút chuột nào.
xử lý sự kiện của tôi (C#):WPF DataGrid PreviewMouseDown không xử lý nhấp chuột phải như mong đợi
private void LadderMouseClick(object sender, System.Windows.Input.MouseButtonEventArgs e) {
if (m_ActiveAction != null) {
m_ActiveAction();
}
e.Handled = true;
}
My DataGrid (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">
này hoạt động, và chạy các hành động đúng cách nhấp chuột khi người dùng hoặc phải hoặc trái trên DataGrid. Tuy nhiên, vấn đề là khi người dùng nhấp chuột phải, ô của họ sẽ được chọn (một đường viền màu đen xuất hiện xung quanh ô); điều này không xảy ra khi họ nhấp chuột trái.
Tại sao chúng hoạt động khác nhau? Không nên chúng được xử lý theo cùng một cách? Có cái gì đó thực sự đơn giản tôi đang mất tích?
Cảm ơn trước!
EDIT:
Tôi đã cố gắng cho đến nay DataGrid.UnselectAll(), DataGrid.UnselectAllCells(), DataGrid.SelectedIndex = -1, và DataGrid.CurrentCell = mặc định (DataGridCellInfo). Không ai trong số họ đã làm việc cho tôi.
EDIT # 2:
Nếu được, tôi đang sử dụng DataGridTemplateColumns với TextBlocks để hiển thị dữ liệu của tôi. Điều này có thể gây ra hành vi này không?
SOLUTION:
này được giải quyết bằng cách Peter Hansen 's đề nghị đó là thêm một sự kiện PreviewMouseRightButtonDown để DataGrid cũng như các sự kiện PreviewMouseDown.
Cảm ơn bạn đã trả lời, rất tiếc điều này dường như không khắc phục được. Bạn có thể muốn biết rằng, mặc dù DataGrid của tôi được đặt thành Single SelectionMode, nhiều ô có thể được đánh dấu nếu tôi nhấp vào sau khi một mục được thêm hoặc xóa. Các ô được chọn khác dường như có đường viền màu xanh thay vì một đường viền màu đen. –
Tôi đã cập nhật câu trả lời của mình - hy vọng nó sẽ giúp bạn ngay bây giờ .. –
Oh wow thú vị, thêm PreviewMouseRightButtonUp đã sửa nó. Tôi có thể thề rằng tôi đã thử điều này trước đây, nhưng tôi thực sự đã thử PreviewMouseRightButtonDown trước khi không hoạt động. Cảm ơn bạn đã giúp đỡ! –