Ich habe ein Panel, in diesem Panel sind mehrere rechteckige Bedienelemente (die Anzahl der Bedienelemente). Ich möchte, dass der Benutzer die Steuerelemente innerhalb des Panels verschieben kann, damit sie die Steuerelemente so anordnen können, wie es ihnen passt Beste. Hat jemand irgendwelche Ressourcen, die ich lesen könnte, oder einfache Tipps, die mich auf den richtigen Weg bringen würden?
Danke
Ich habe eine mögliche, einfache Methode gefunden, ein Steuerelement in einem Drag / Move-Stil zu verschieben ... Hier sind die Schritte.
Setzen Sie beim ersten MouseDown-Ereignis eine Point-Eigenschaft (InitialPosition) mit dem folgenden Code
%Vor%Nun, da Sie die Startposition haben, müssen Sie die Position der Maus relativ zu Ihrer Bewegungssteuerung ermitteln. Dies bedeutet, dass Sie nicht auf die Mitte Ihrer Kopfzeile klicken, um sie zu verschieben, und sie verschiebt den oberen linken Teil des Steuerelements sofort an die Position des Mauszeigers. Platzieren Sie diesen Code in dem MouseDown-Ereignis zu Zweck:
%Vor% Jetzt haben Sie den Punkt, an dem das Steuerelement entstanden ist (startX und STartY), die Position der Maus innerhalb Ihrer Bewegungssteuerung (RelativeX, RelativeY), wir müssen das Steuerelement nur an einen neuen Ort verschieben! Dazu sind ein paar Schritte erforderlich. Zuerst benötigt Ihr Steuerelement eine RenderTransform, die eine TranslateTransform ist. Wenn Sie dies nicht in XAML festlegen möchten, können Sie es mit this.RenderTransform = new TranslateTransform
festlegen.
Nun müssen wir die X- und Y-Koordinaten in der RenderTransform festlegen, damit das Steuerelement an eine neue Position verschoben wird. Der folgende Code führt dies durch
%Vor%Wie Sie sich denken können, gibt es ein bisschen Code (Variablen-Deklarationen usw.), aber das sollte alles sein, was Sie brauchen, um loszulegen :) Happy Coding.
BEARBEITEN:
Ein Problem, das möglicherweise auftritt, besteht darin, dass Sie das Steuerelement aus dem Bereich seines übergeordneten Steuerelements verschieben können. Hier ist ein kurzer und schmutziger Code, um das Problem zu beheben ...
Fügen Sie diesen Code in Ihr MouseMove-Ereignis ein, bevor die tatsächliche Bewegung stattfindet. Dadurch wird überprüft, ob das Steuerelement versucht, sich außerhalb der Grenzen des übergeordneten Steuerelements zu bewegen. Der Befehl IsMoving = false
bewirkt, dass die Steuerung den Bewegungsmodus verlässt. Dies bedeutet, dass der Benutzer erneut auf den Bewegungsbereich klicken muss, um zu versuchen, das Steuerelement zu verschieben, da es an der Grenze angehalten hat. Wenn Sie möchten, dass das Steuerelement die Bewegung automatisch fortsetzt, nehmen Sie einfach diese Zeile heraus und die Steuerung springt auf den Cursor zurück, sobald sie sich wieder in einem zulässigen Bereich befindet.