2010-09-26 2 views
3

Привет Я пытаюсь получить прямоугольник экрана кнопки wpf, чтобы я мог выделить его.Как получить прямоугольник экрана кнопки wpf

Я использую это, чтобы достичь того же:

AutomationPeer theBtnPeer = createPeerForElement (БТН); Rect rect = theBtnPeer.GetBoundingScreenRectangle();

Это прекрасно работает и дает мне правый прямоугольник.

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

Как получить новый ограничивающий прямоугольник этой кнопки?

Благодаря

+0

ПОЖАЛУЙСТА, добавьте запятые в свои предложения ... ваш вопрос действительно больно читать –

ответ

1

Вы можете получить высоту и ширину прямоугольника с помощью свойств ActualHeight и ActualWidth.

Координаты в окне будет зависеть от типа управления макетом, что кнопка находится в

Если ваша цель состоит в том, чтобы поставьте отметку, я предлагаю другой путь:. Изменить шаблон кнопки, чтобы включить подсветку прямоугольник, невидимый по умолчанию, с триггером, чтобы сделать его видимым, если выполнено какое-либо условие.

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

+0

Спасибо за ответ. и извините за плохое форматирование. Кажется, я не могу нажать {ENTER}, чтобы перейти к новой строке. Его не только подчеркивают, что я хочу сделать. Я действительно заинтересован в получении правильной экранной координаты для некоторых других функций. Что меня смущает, почему код, AutomationPeer theBtnPeer = createPeerForElement (btn); theBtnPeer.GetBoundingRectangle(); не дает правильный прямоугольник после прокрутки. Благодарю. – Rahul

+0

Как HTML, простые возвращения каретки игнорируются, но второй сделает трюк (я отредактировал вопрос). Вы пытались рекурсивно получить ограничивающий прямоугольник визуального дерева, поднимаясь вверх?GetBoundingRectangle _may_ возвращает координаты внутри родителя, что подразумевает получение его границ и т. Д. – Timores

0

Если проблема заключается в том, что свойства позиции не обновляются, вызовите ScrollViewer.UpdateLayout(), чтобы переназначить свойства, связанные с компоновкой.

Если проблема заключается в том, что метод всегда возвращает одно и то же значение для данного элемента управления, возможно, вы ищете метод Visual.PointToScreen(). Это даст вам абсолютные координаты относительно левого верхнего угла экрана. Назову это на кнопке, как:

btn.PointToScreen(new Point(0, 0));

Что вы собираетесь делать с возвращаемым прямоугольником? Вы позиционируете то, что находится в том же контейнере, что и кнопка, или всплывающее окно, или что-то еще? Если вы можете расширить свой примерный код, чтобы обеспечить часть кода, который использует полученный прямоугольник, это поможет нам определить, в чем проблема.