Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Как определить позицию контрола на экране?


Автор: MrCherry 5.8.2008, 00:50
Как определить позицию контрола относительно экрана?
Нужно создать окошко с позицией на 26 пикселей ниже объекта, на котором кликнули....

Автор: Kefir 6.8.2008, 10:21
http://msdn.microsoft.com/en-us/library/system.windows.window.windowstartuplocation.aspx
+
http://msdn.microsoft.com/en-us/library/system.windows.media.visualtreehelper.getoffset.aspx (это локейшн визуала относительно парента)
http://msdn.microsoft.com/en-us/library/ms608865.aspx (это локешн относительно предка)

так вот, схема проста, определяешь координаты контрола относительно окна (TransformToAncestor), получаешь координаты окна на десктопе и вычисляешь координаты контрола относительно десктопа. потом вычисляешь координаты для нового окна (например если на 26 пикселей ниже контрола - window_y = control_y + control.ActualHeight + 26, где control_y это координата y контрола относительно десктопа. ну а window_x будет control_x)

не знаю зачем это надо, но на всякий случай - обрати внимание на такой контрол как Popup. возможно он больше подойдёт под твои нужды (не надо делать новых окон, а также можно без проблем выставить положение относительно родителя).

Автор: MrCherry 6.8.2008, 22:38
аа.. точно! спасибо!

теперь вот никак не допру - как сделать так, чтобы при нажатии где то за пределами - оно закрывалось?
пытался заюзать Mouse.PreviewMouseUpOutsideCapturedElement событие - не работает...

Автор: Kefir 7.8.2008, 13:50
если ты о Popup - то просто поставь StaysOpen = false (оно по дефолту true).
если ты о Window - закрывай его на потере фокуса.

Автор: MrCherry 7.8.2008, 15:15
Цитата

если ты о Popup - то просто поставь StaysOpen = false (оно по дефолту true).

Спасибо, работает.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)