Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получение локальных координат, Grid внутри Grid, неправильные локальные координаты 
V
    Опции темы
NoliX
Дата 27.7.2009, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 5.7.2005

Репутация: нет
Всего: 1



Есть большой grid, который объявлен в xaml вот так
Код

        <Border Grid.Row="1" Grid.Column="0" BorderThickness="2" BorderBrush="Black" Margin="2">

            <Grid x:Name="textGrid" Margin="2" MouseLeftButtonDown="textGrid_MouseLeftButtonDown" Cursor="IBeam" Background="Transparent">

            </Grid>

    </Border>


В конструкторе Page я помещаю в него еще один grid вот так:

Код

textGrid.Children.Add(anotherGrid);


проблема такая,что если я обрабатываю щелчок мышью событием подвешенным к большому гриду, кликая в верхний левый угол я получаю координаты {0,0}, что логично, в общем-то.
Однако, если я отлавливаю событие внутренним гридом, в той же точке я получаю координаты {6,36}
Понятно, что 6 = BorderThickness + Margin(Рамки) + Margin(Грида)
36, тоже получается из xaml кода который я не привел.

Дык вот меня жутко мучает вопрос: Почему так? разве не должно быть во втором случае {0,0}, ведь у внутреннего то грида Margin=0, я проверял? Или я что-то путаю? В конце-концов, как мне получить эти цифры (6 и 36) не опытным путем?
--------------------
Опыт - это учитель, который очень дорого берет за свои уроки
PM MAIL   Вверх
fantast
Дата 27.7.2009, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 10.12.2006
Где: минск, столица на шей Родины

Репутация: нет
Всего: 2



А каким образом ты получаешь эти координаты? Выложи код эвента
--------------------
Эпитафия: Он старался.                                   Неизвестный
PM MAIL   Вверх
NoliX
Дата 27.7.2009, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 5.7.2005

Репутация: нет
Всего: 1



Код

Point pnt = e.GetPosition(null)

Но я больше, чем уверен, что дело совсем не в этом

Это сообщение отредактировал(а) NoliX - 27.7.2009, 23:51
--------------------
Опыт - это учитель, который очень дорого берет за свои уроки
PM MAIL   Вверх
neiron
Дата 27.7.2009, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 18.4.2006
Где: Краснодар

Репутация: нет
Всего: 4



А если здесь написать:
    
Код

Point pnt = e.GetPosition(внутренний_грид)

?
PM MAIL   Вверх
NoliX
Дата 27.7.2009, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 5.7.2005

Репутация: нет
Всего: 1



Отлично, работает так, как нужно) Однако это не решает проблему)
Дело в том, что суть работы такова что я получаю координату от внешнего грида и по этой координате вызываю VisualTreeHelper на внутренний грид (не спрашивайте почему так криво, это не я писал).
В общем-то все, что мне сейчас нужно - это умело делать преобразование координат из внешнего грида во внутренний и ожидалось, что раз нет никаких Margin и Padding то координаты левого верхнего угла совпадают и раны {0,0} shit!

как я сейчас уже понимаю, координаты VisualTreeHelper считает так, же как и е GetPosition(null). Как их преобразовывать одни в другие?

Это сообщение отредактировал(а) NoliX - 27.7.2009, 23:57
--------------------
Опыт - это учитель, который очень дорого берет за свои уроки
PM MAIL   Вверх
NoliX
Дата 6.8.2009, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 5.7.2005

Репутация: нет
Всего: 1



Нашел решение своей проблемы:
Позицию контрола относительно любого своего родителя можно вычислить следующим образом:
Код

GeneralTransform gt = Control.TransformToVisual(Parent as UIElement);
Point pos = gt.Transform(new Point(0, 0));

--------------------
Опыт - это учитель, который очень дорого берет за свои уроки
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.1188 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.