Ich habe ein WPF Grid
mit einigen Zeilen und Spalten, z. B.
Mit einem Handler für MouseMove
in der .cs-Datei, z. B.
Ich möchte in der Lage sein, welche Zeile und Spalte im Gitter die Maus zu finden, ist das möglich?
[Hinweis: Dies ist eine vereinfachte Version des Problems, so dass es ein wenig seltsam erscheint, es auf diese Weise zu präsentieren - es ist Teil eines Drag & amp; Drop zwischen den Gitterfunktionen]
Folgendes kann getan werden (sollte aber nicht bei größeren Gittern verwendet werden). Es ist nur für Zeilen, aber eine zweite Schleife kann auf die Spalten angewendet werden ...
Die Antwort von Nicolas funktioniert nur, wenn das Gitter einige UIElements enthält (deren Position im Gitter bestimmt ist - ich schätze, das würde auch Probleme verursachen, wenn ein Element mehrere Zeilen / Spalten umfasst).
%Vor%Andre's Antwort hat einen kleinen Fehler, da die erhaltenen Koordinaten die Zeilen- und Spaltenüberschriften im DataGrid nicht berücksichtigen. Zumindest war das der Fall, als ich die Lösung in Visual Basic implementierte.
Sie können die angezeigten Beispiele auch ändern, um ein großes DataGrid zu berücksichtigen. Es scheint mir, dass die Einschränkung dort auf der Scroll-Ansicht basiert, also zeige ich zwei Implementierungen dieser Korrektur:
%Vor%Beachten Sie, dass ScrollViewer.HorizontalOffset Property gibt einen Wert in Device Independent Pixels zurück, also versetze ich meine Position nur einmal, bevor ich die Spalten durchlaufe.
Beachten Sie, dass ScrollViewer.VerticalOffset Property gibt die Anzahl der Elemente zurück, wenn CanContentScroll = True ist. In meinem Beispiel habe ich also bei jeder Schleife den Zähler um die Höhe eines Elements (DataGridRow) versetzt. Wenn CanContentScroll = False ist, kann es wie im Fall der Spaltenindexschleife behandelt werden.
Ich konnte keine Zeilendefinitionen im DataGrid für .Net 4.0 in Visual Basic finden, aber die folgende unterstützende Funktion hilft beim Abrufen des DataGridRow:
%Vor%Und die Funktion FindVisualChild in Visual Basic:
%Vor%Ich hatte genau dein Problem und ich benutze auch FluidKit. Ich versuche, einen Formular-Designer zu erstellen, bei dem Sie ein Steuerelement aus einer Toolbox ziehen und in eine Grid-Zelle ablegen können. Hier ist, wie ich es gelöst habe:
Ich habe ein Raster mit zwei Dummy-Rechtecken in der ersten Reihe erstellt:
%Vor%Es sieht so aus:
Beachten Sie, dass ich für jedes meiner Rechtecke einen DropTargetAdvisor definiert habe, jetzt lautet die Logik wie folgt:
OnDropCompleted
in DropTargetAdvisor
entfernt dann das Rechteck, in dem Sie das Steuerelement ablegen, und erhält seine Koordinaten aus den Eigenschaften Grid.Row
und Grid.Column
Attached. Hier ist meine DefaultDropTargetAdvisor.OnDropCompleted
Methode:
Tags und Links wpf mouseevent grid