Ich bin sehr neu in C# und WPF und würde eine WPF-Anwendung erstellen, die Formen mit einer Schaltfläche zeichnet. Die Formen müssen sich dann auf der Leinwand bewegen können. Wenn ich eine Form im XAML erzeuge, bewegt es sich. Allerdings kann ich den mit dem Button erstellten nicht bewegen. Könnte jemand bitte helfen? Unten sind der XAML und der Code, den ich verwende.Wie kann ich die Form verschieben, die mit einer Schaltfläche auf der Zeichenfläche in WPF erstellt wurde?
XAML:
<Window x:Class="All_test.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Canvas x:Name="canvas" >
<Button Content="Button" Canvas.Left="250" Canvas.Top="260" Width="75" Click="Button_Click_1" />
<Rectangle x:Name="rect"
Height="100" Width ="100" Fill="red"
MouseLeftButtonDown="rect_MouseLeftButtonDown"
MouseLeftButtonUp="rect_MouseLeftButtonUp"
MouseMove="rect_MouseMove"
Canvas.Left="342" Canvas.Top="110" />
</Canvas>
Dies ist der Code, den ich das rote Quadrat in XAML gezogen zu bewegen verwenden. Wie kann ich das Gleiche für den grünen Button tun?
public partial class MainWindow : Window
{
private bool _isRectDragInProg;
public MainWindow()
{
InitializeComponent();
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
Rectangle rect = new Rectangle();
rect.Fill = new SolidColorBrush(Colors.Green);
rect.Stroke = new SolidColorBrush(Colors.Black);
rect.Height = 100;
rect.Width = 100;
rect.StrokeThickness = 4;
canvas.Children.Add(rect);
InitializeComponent();
}
private void rect_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
_isRectDragInProg = true;
rect.CaptureMouse();
}
private void rect_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
_isRectDragInProg = false;
rect.ReleaseMouseCapture();
}
private void rect_MouseMove(object sender, MouseEventArgs e)
{
if (!_isRectDragInProg) return;
// get the position of the mouse relative to the Canvas
var mousePos = e.GetPosition(canvas);
// center the rect on the mouse
double left = mousePos.X - (rect.ActualWidth/2);
double top = mousePos.Y - (rect.ActualHeight/2);
Canvas.SetLeft(rect, left);
Canvas.SetTop(rect, top);
}
Danke, guter Herr! Einige Anpassungen waren notwendig, aber insgesamt hat dies mir geholfen, die Idee zu verstehen. Die Empfehlungen werden ebenfalls geschätzt. :) – Greengored