Wie kann die position zu verändern auf Leinwand in WPF?
Wie kann change runtime position auf Leinwand, die dynamisch Hinzugefügt habe ich-Steuerelemente (labels, Linien). Kann ich zoom-Leinwand mit alle Steuerelemente, aber ich kann mich nicht bewegen in einer anderen position mit MouseMove, MouseUp, MouseDown.
<Canvas Name="canvas" Width="1000" Height="400"
Margin="100 0 0 50"
Background="White"
VerticalAlignment="Bottom"
HorizontalAlignment="Center"
MouseWheel="Canvas_MouseWheel"
MouseMove="Canvas_MouseMove"
MouseUp="Canvas_MouseUp"
MouseDown="Canvas_MouseDown">
<Canvas.RenderTransform>
<ScaleTransform x:Name="st" />
</Canvas.RenderTransform>
</Canvas>
Finde ich diesen code im internet, aber für meinen Fall nicht funktioniert
bool activated;
Point point;
private void Canvas_MouseDown(object sender, MouseButtonEventArgs e)
{
activated = true;
point = Mouse.GetPosition(canvas);
Mouse.Capture(canvas);
}
private void Canvas_MouseMove(object sender, MouseEventArgs e)
{
if (activated)
{
double top = Canvas.GetTop(canGraph) + Mouse.GetPosition(canvas).Y - point.Y;
Canvas.SetTop(canvas, top);
double left = Canvas.GetLeft(canvas) + Mouse.GetPosition(canvas).X - point.X;
Canvas.SetLeft(canvas, left);
point = Mouse.GetPosition(canvas);
}
}
private void Canvas_MouseUp(object sender, MouseButtonEventArgs e)
{
activated = false;
Mouse.Capture(null);
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bearbeiten - Die bisherige Lösung, die ich angegeben habe wurde nicht zur Arbeit gehen nach dem ersten bewegen des Elements ohne mehr code, so ist hier eine bessere
Damit richtig arbeiten, die das canvas-element ausgerichtet werden müssen, um das Koordinatensystem der Eltern, die wir erreichen, wie wir die Leinwand in der oberen linken Ecke, wenn Sie nicht setzen Sie zur Berechnung der Differenz zu zweit.
Code hinter
XAML
Ursprüngliche Antwort
XAML
Ich würde so etwas tun:
Hinzufügen übersetzen, transformieren und um Sie zu halten vorhergehenden verwandeln es in eine Gruppe
Verwenden, übersetzen, transformieren, um die Leinwand mit Positionen aus die Maus-Ereignisse
Ausgangspunkt für Ihre übersetzungen können Sie die Koordinaten in die container
Code hinter:
XAML