Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > .NET > WPF, UWP, WinRT, XAML
Регистрация

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

Ответ
 
Опции темы
Старый 16.05.2013, 22:29   #1
Blondy
Профессионал
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Адрес: Scandinavia
Сообщений: 1,388
Репутация: 1230
По умолчанию 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
Blondy вне форума   Ответить с цитированием
Старый 16.05.2013, 23:23   #2
eval
паяю
 
Регистрация: 29.08.2012
Сообщений: 4,030
Репутация: 422
По умолчанию

Код:

System.Windows.Controls.Canvas.GetLeft(imageTest1)

eval вне форума   Ответить с цитированием
Старый 16.05.2013, 23:33   #3
Blondy
Профессионал
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Адрес: Scandinavia
Сообщений: 1,388
Репутация: 1230
По умолчанию

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

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

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

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

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

Прощу прощения, но система не разрешает Вам плюс поставить((((
Blondy вне форума   Ответить с цитированием
Старый 17.05.2013, 19:48   #6
Blondy
Профессионал
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Адрес: Scandinavia
Сообщений: 1,388
Репутация: 1230
По умолчанию

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

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

Да, такой код не работает, он сработает если только указать через 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
Адрес: Scandinavia
Сообщений: 1,388
Репутация: 1230
По умолчанию

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

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


06:58.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru