Привет :) Я работаю в WPF, главное окно - холст.Я создал пользовательский элемент управления Страна , который можно перемещать по главному окну с помощью мыши:
public partial class Country : UserControl
{
private Point position = new Point(0, 0);
private Point mousePosition = new Point(0, 0);
protected Boolean isDragging;
private Double prevX, prevY;
public static List<Country> list = new List<Country>();
public static int num = 1;
private string riddle;
public Country()
{
InitializeComponent();
this.Height = 100;
this.Width = 100;
this.Background = Brushes.Red;
this.Content = "country" + num;
num++;
position = new Point(Canvas.GetLeft(this), Canvas.GetTop(this));
this.MouseLeftButtonDown += new MouseButtonEventHandler(Control_MouseLeftButtonDown);
this.MouseLeftButtonUp += new MouseButtonEventHandler(Control_MouseLeftButtonUp);
this.MouseMove += new MouseEventHandler(Control_MouseMove);
list.Add(this);
}
private void Control_MouseLeftButtonDown(Object sender, MouseButtonEventArgs e)
{
isDragging = true;
var draggableControl = (sender as UserControl);
mousePosition = e.GetPosition(Parent as UIElement);
draggableControl.CaptureMouse();
}
private void Control_MouseLeftButtonUp(Object sender, MouseButtonEventArgs e)
{
isDragging = false;
var draggable = (sender as UserControl);
var transform = (draggable.RenderTransform as TranslateTransform);
if (transform != null)
{
prevX = transform.X;
prevY = transform.Y;
}
draggable.ReleaseMouseCapture();
}
private void Control_MouseMove(Object sender, MouseEventArgs e)
{
var draggableControl = (sender as UserControl);
if (isDragging && draggableControl != null)
{
var currentPosition = e.GetPosition(Parent as UIElement);
var transform = (draggableControl.RenderTransform as TranslateTransform);
if (transform == null)
{
transform = new TranslateTransform();
draggableControl.RenderTransform = transform;
}
double aX = transform.X;
double aY = transform.Y;
transform.X = (currentPosition.X - mousePosition.X);
transform.Y = (currentPosition.Y - mousePosition.Y);
if (prevX > 0)
{
transform.X += prevX;
transform.Y += prevY;
}
}
}
}
Это код xaml:
<UserControl x:Class="WpfApplication7.Country"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WpfApplication7"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid Width="100" Height="100" Background="Red">
</Grid>
</UserControl>
Я пытался предотвратить пересечение экземпляров страны друг с другом, то есть - если у меня есть несколько стран в главном окне, и я перемещаю страну, и она собирается пересекаться с другой странойтогда движущаяся страна остановится, или вернется, или что-то в этом роде.К сожалению, все идеи, которые я имел в виду, провалились.Должен ли я сделать что-то в MainWindow, возможно?Я был бы очень рад, если кто-то может предложить решение или понимание этого.
Помощь будет высоко ценится