Как получить ограничивающий ящик для нескольких элементов в wpf? - PullRequest
4 голосов
/ 24 мая 2011

У меня есть несколько элементов, я хочу вычислить минимальный прямоугольник, в который они могут поместиться, но элементы повернуты до некоторой степени, или перекошены, или и то, и другое. Так как же получить наименьший прямоугольник, который может содержать все?

Ответы [ 3 ]

1 голос
/ 24 мая 2011

Вот ссылка на реализацию Dynamic Canvas . Этот элемент управления автоматически изменяет размеры в соответствии со своим содержимым, поэтому ответ на вашу проблему можно найти в этом коде. Посмотрите на функцию MeasureOverride.

1 голос
/ 24 мая 2011

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

Затем вы можете легко вычислить ограничивающую рамку, вычисливмин и макс х и у для всех этих точек.

0 голосов
/ 24 мая 2011

Сделайте foreach в списке элементов, которые вы хотите. На каждой итерации цикла получайте позицию элемента Canvas (вверху слева) и добавляйте ActualWidth / ActualHeight, чтобы получить нижнюю правую точку. Возьмите верхнюю левую и нижнюю правую точки и вызовите Transform.Transform, чтобы получить ФАКТИЧЕСКУЮ верхнюю левую и нижнюю правую точки.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...