Как предотвратить пересечение двух меток, созданных во время выполнения, друг с другом? (C # WPF) - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть холст, на котором после щелчка левой кнопки мыши на нем создается метка в точке щелчка.Это код xaml:

public partial class MainWindow : Window
{
    int num = 1;
    List <Label> countries = new List<Label>();
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        var point = Mouse.GetPosition(Canvas);
        Label label = new Label() { Width = 100, Height = 100 };
                    Canvas.Children.Add(label);
                    Canvas.SetLeft(label, point.X);
                    Canvas.SetTop(label, point.Y);
                    label.Focus();
                    num++;
                    countries.Add(label);
            }
    }

Я хотел бы сделать так, чтобы две разные метки не могли пересекаться друг с другом.Идея состоит в том, что если пользователь попытается создать метку в месте, которое может привести к его пересечению с другой существующей меткой, появится окно сообщения и предложит ему выбрать другое местоположение.

К сожалению, у меня ничего не получилосьв реализации этого.Если бы кто-нибудь мог помочь, я был бы очень рад.Помощь будет высоко ценится:)

1 Ответ

0 голосов
/ 14 ноября 2018

Попробуйте это:

 private void Canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            var point = Mouse.GetPosition(canvas);
            Rect newrect = new Rect(point.X, point.Y, 100, 100);
            Boolean isIntersects = false;
            foreach (Control control in canvas.Children)
            {
                if (control is Label)
                {
                    Rect oldrect = new Rect(Canvas.GetLeft(control), Canvas.GetTop(control), control.Width, control.Height);
                    if (newrect.IntersectsWith(oldrect))
                    {
                        MessageBox.Show("Oops. Intersecting...");
                        isIntersects = true;
                        break;
                    }
                }
            }
            if (isIntersects == false)
            {
                Label label = new Label() { Width = 100, Height = 100 };
                label.Content = "This is a label:)";
                label.Background = new SolidColorBrush(Colors.Yellow);
                canvas.Children.Add(label);
                Canvas.SetLeft(label, point.X);
                Canvas.SetTop(label, point.Y);
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...