Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > WPF, UWP, WinRT, XAML
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2013, 22:29   #1
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,386
По умолчанию C# & Silverlight: получить координаты неподвижного объекта

Дорогие форумчане, не могли бы Вы подсказать, как можно получить координаты статического объекта - картинки? Проблема вся в том, что никакие курсоры на эту картинку наводиться не будут, никакие кликанья или иные события производиться не будут: приложение загрузилось и сразу нужно точно знать координаты.

Я сделала такой набросок:
XAML:
Код:
  <Image Height="100" Width="100" Name="imageTest1" Stretch="Fill" Source="/Images/pic1.png"   />
В классе с методами на событие, запускающее приложение:
Код:
 double imageX = (double) imageTest1.GetValue(Canvas.LeftProperty);
 double imageY = (double) imageTest1.GetValue(Canvas.TopProperty);

//Выводим коорлинаты для контроля (TextBlockAxis) их правильности на элемент формы

  StringBuilder strAxis = new StringBuilder();
 String strAxis = imageX.ToString() + " " + imageY.ToString();
TextBlockAxis.Text = strAxis;
И выдает текстовое поле координаты 0 0, хотя там нулями и не пахнет, так как картинка находится ближе к правому краю поля.

Я решила схитрить и бросить картинку на дополнительный элемент контроля Канва и запросить координаты уже этого элемента
XAML
Код:
 <Canvas Height="100" Name="canvasImage1" Width="100"  Margin="130,31,0,0">
                    <Image Height="100" Width="100" Name="imageTest1" Stretch="Fill" Source="/Images/pic1.png"   />
                </Canvas>
C#:
Код:
 double imageX = (double) canvasImage1.GetValue(Canvas.LeftProperty);
 double imageY = (double) canvasImage1.GetValue(Canvas.TopProperty);

StringBuilder strAxis = new StringBuilder();
 String strAxis = imageX.ToString() + " " + imageY.ToString();
TextBlockAxis.Text = strAxis;

Эффект тот же 0 0
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 16.05.2013, 23:23   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,022
По умолчанию

Код:
System.Windows.Controls.Canvas.GetLeft(imageTest1)
eval вне форума Ответить с цитированием
Старый 16.05.2013, 23:33   #3
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,386
По умолчанию

Я искренне надеюсь, что Ваш код выдаст то, что надо))

Спрашиваю полушепотом: а эта идея тоже сработает, если речь идет не о простом десктопном приложении, а приложении для Windows Phone 7?
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 16.05.2013, 23:35   #4
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,022
По умолчанию

а сильверлайт для вп7 особенный? я не в курсе, дело не имел ...
и при чем тут десктоп, если у вас сильверлайт?

Последний раз редактировалось eval; 16.05.2013 в 23:37.
eval вне форума Ответить с цитированием
Старый 17.05.2013, 00:47   #5
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,386
По умолчанию

Спасибо Вам огромное за консультацию))
Извините, если я не так выразилась по поводу Silver - я еще только начинаю изучать эту технологию и поэтому возникают такие наивные вопросы.

Прощу прощения, но система не разрешает Вам плюс поставить((((
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 17.05.2013, 19:48   #6
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,386
По умолчанию

Уважаемый eval, на Вас вся надежда как на профессионала: к сожалению предложенный Вами код тоже выдал координаты 0 0.

И я поняла - эта картинка получает координаты в привязке к элементу формы, добавленного ранее - так сказать, относительные координаты. А мне бы надо абсолютные координаты - чтобы отчет шел из верхнего левого угла самого главного родительского элемента приложения. Фактически установить левый верхний угол окна точкой отчета координат для всех элементов контроля (вне зависимости в какой обертке они находятся - stackPanel, Grid ). Иначе мне совпадение перемещаемых элементов по координатам не посчитать. А как задать этот отчет от абсолюта?
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 18.05.2013, 10:12   #7
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,022
По умолчанию

Да, такой код не работает, он сработает если только указать через Set[..].

мне не приходилось с таким дело иметь (даже и не знаю придется ли когда, а вам зачем?).

Попробуйте такой код, нарыл по закромам..
Код:
System.Windows.Media.GeneralTransform __transform = imageTest1.TransformToVisual(Application.Current.RootVisual);
Point __pointOffset = __transform.Transform(new Point(0, 0));
в __pointOffset по X и Y координаты "нулевой" точки вашей картинки должны быть.
eval вне форума Ответить с цитированием
Старый 20.05.2013, 02:06   #8
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,386
По умолчанию

Спасибо Вам огромное!

На самом деле проблема решалась гораздо проще - я почитала внимательно что пишут специалисты про свойства контейнеров. Оказалось, что самое надежное, чтобы точно можно было рулить координатами системы отчета, необходимо было выбрать контейнер Canvas, а никак ни Grid или StackPanel, как было выбрано у меня.

А надо было все мне для реализации травиальной (казалось бы!) задачи - теста в стиле "drag&drop": соответствующие по содержанию картинки совмещаются и считается результат (верно/неверно). И чтобы граммотно отследить совмещение координаты и были нужны.
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DelphiX, как получить текущие координаты объекта? codermoder Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 17.03.2011 00:26
Google API, координаты объекта kirosin PHP 5 06.10.2010 01:31
Service & Silverlight Cat_Kira Общие вопросы .NET 0 21.11.2009 23:43
Как можно получить координаты мыши в нутри объекта(в моём случаии в диве) killer12rus JavaScript, Ajax 2 06.07.2009 19:57
Координаты курсора относительно объекта на форме CoDeR Общие вопросы Delphi 4 01.08.2007 22:49