Хотя другие удовлетворяли эту потребность, как обычно, никто не ответил на проклятый вопрос. Я могу придумать любое количество сценариев, которые требуют определения границ. Например, отображение HTML может быть выполнено с помощью IFRAME на главной странице HTML, а возможность позиционировать его в соответствии с визуализированными границами панели позволит вам легко интегрировать его в свой пользовательский интерфейс.
Вы можете определить происхождение элемента управления, используя GeneralTransform on Point (0,0) для корневой визуальной системы координат, а ActualHeight и ActualWidth отображаются непосредственно.
GeneralTransform gt =
TransformToVisual(Application.Current.RootVisual as UIElement);
Point offset = gt.Transform(new Point(-1, -1));
myFrame.SetStyleAttribute("width", (ActualWidth + 2).ToString());
myFrame.SetStyleAttribute("height", (ActualHeight + 2).ToString());
myFrame.SetStyleAttribute("left", offset.X.ToString());
myFrame.SetStyleAttribute("top", offset.Y.ToString());
myFrame.SetStyleAttribute("visibility", "visible");
В приведенном выше примере я преобразовал (-1, -1) и добавил 2 к высоте и ширине, чтобы компенсировать область границы в один пиксель вокруг IFRAME - этот код извлекается из рабочего приложения, которое использует IFRAME для отображать «встроенный» HTML при размещении в браузере.
Кроме того, существует более одного способа снятия шкуры с кошки, и для тестирования попадания вы можете найти VisualTreeHelper интересным.
IEnumerable<UIElement> VisualTreeHelper
.FindElementsInHostCoordinates(Point intersectingPoint, UIElement subtree)
Возвращает каждый элемент UIE под точкой (обычно от мыши). Существует перегрузка, которая принимает Rect вместо этого.