Границы. Intersect для WPF

У меня есть приложение Winforms, которое позволяет пользователю перетаскивать некоторые метки по экрану.

Цель состоит в том, чтобы поместить совпадающие метки друг на друга.

Я сохраняю ссылку на эти ярлыки в списке, и в данный момент я проверяю, не перекрываются ли они, выполнив следующие действия.

    foreach (List<Label> labels in LabelsList)
        {
            var border = labels[1].Bounds;
            border.Offset(pnl_content.Location);

            if (border.IntersectsWith(labels[0].Bounds))
            {
                labels[1].ForeColor = Color.Green;
            }
            else
            {
                labels[1].ForeColor = Color.Red;
            }
        }

Проблема в том, что это подходит только для Winforms (Bounds.Intersect). Что я могу сделать в WPF для достижения того же результата?

Если это имеет значение, я в настоящее время добавляю обе метки к разным <ItemsControl> на мой взгляд.


person Lucas    schedule 25.01.2012    source источник
comment
Взгляните на: stackoverflow.com/questions/1554116/ отвечает ли это на ваш вопрос?   -  person Emond Erno    schedule 25.01.2012
comment
Спасибо, ребята, вы поставили меня на правильный путь!   -  person Lucas    schedule 26.01.2012


Ответы (1)


Так что благодаря комментариям я смог сделать то, что мне было нужно.

Код WPF теперь выглядит так для всех, кто играет дома:

    public void Compare()
    {

        foreach (List<Label> labels in LabelsList)
        {
            Rect position1 = new Rect();
            position1.Location = labels[1].PointToScreen(new Point(0, 0));                
            position1.Height = labels[1].ActualHeight;
            position1.Width = labels[1].ActualWidth;

            Rect position2 = new Rect();
            position2.Location = labels[0].PointToScreen(new Point(0, 0));
            position2.Height = labels[0].ActualHeight;
            position2.Width = labels[0].ActualWidth;

            if (position1.IntersectsWith(position2))
            {
                labels[1].Foreground = new SolidColorBrush(Colors.Green);
                continue;
            }

            labels[1].Foreground = new SolidColorBrush(Colors.Red);
        }
    }
person Lucas    schedule 26.01.2012
comment
Просто помните, что когда вы используете RenderTransform или LayoutTransform на метках, ваша функция будет давать ложные срабатывания и ложные отрицания. - person Emond Erno; 26.01.2012