Ich habe ein DataGrid mit einem PreviewMouseDown-Ereignis in einem Benutzersteuerelement eingerichtet. Wenn ein Benutzer seine Maus in eine Zelle bewegt, legt er fest, dass eine Aktion basierend auf dem Inhalt der Zelle ausgeführt wird, und die Aktion wird ausgeführt, wenn der Benutzer klickt, unabhängig davon, welche Maustaste gedrückt wird.
Meine Event-Handler (C#):WPF DataGrid PreviewMouseDown wird nicht wie erwartet mit der rechten Maustaste verarbeitet
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">
Dies funktioniert, und führt die Aktion richtig, wenn ein Benutzer entweder rechts oder links Klicks über das Datagrid. Das Problem besteht jedoch darin, dass, wenn der Benutzer mit der rechten Maustaste klickt, die Zelle ausgewählt wird, in der sich die Maus befindet (um die Zelle erscheint ein schwarzer Rand); Dies passiert nicht, wenn sie das Klicken verließen.
Warum verhalten sie sich anders? Sollten sie nicht auf die gleiche Weise behandelt werden? Gibt es etwas wirklich einfaches, was mir fehlt?
Vielen Dank im Voraus!
EDIT:
Ich habe bisher versucht DataGrid.UnselectAll(), DataGrid.UnselectAllCells(), DataGrid.SelectedIndex = -1 und DataGrid.CurrentCell = default (DataGridCellInfo). Keiner von ihnen hat für mich gearbeitet.
EDIT # 2:
Wenn es hilft, ich bin mit DataGridTemplateColumns mit Textblöcken meine Daten anzuzeigen. Könnte dies zu diesem Verhalten führen?
LÖSUNG:
Diese von Peter Hansen ‚s Vorschlag gelöst wurde, die eine Preview Ereignis an das Datagrid sowie die Preview Ereignis hinzuzufügen war.
Danke für die Antwort, leider schien dies nicht zu beheben. Vielleicht möchten Sie wissen, dass mehrere Zellen markiert werden können, wenn ich nach dem Hinzufügen oder Entfernen eines Elements auf ein Element klicke, obwohl mein DataGrid auf Single SelectionMode eingestellt ist. Die anderen ausgewählten Zellen scheinen einen blauen anstelle eines schwarzen zu haben. –
Ich habe meine Antwort aktualisiert - hoffe, es hilft Ihnen jetzt .. –
Oh wow, das ist interessant, Hinzufügen der PreviewMouseRightButtonUp behoben. Ich hätte schwören können, dass ich das schon einmal probiert habe, aber ich habe PreviewMouseRightButtonDown probiert, bevor das nicht funktioniert hat. Danke für Ihre Hilfe! –