Как разместить элемент управления во время выполнения над другим элементом управления в приложении WinRT?

У меня есть приложение C# WinRT. У меня есть ряд эскизов. Когда пользователь нажимает и удерживает миниатюру, я хочу «всплывать» сетку, которая действует как контекстное меню над местом, где находится миниатюра. У меня все работает, кроме позиционирования сетки над целевым эскизом. В WinForms это тривиально, используя свойства Top/Left, но эти свойства или что-то подобное, похоже, не существуют в WinRT.

У меня есть доступ к целевому объекту изображения через HoldRoutingEventArgs, и у меня есть доступ к сетке через XAML, поскольку он существует при запуске, но с непрозрачностью 0%. Я даже сохранил структуру Rect, принадлежащую целевому объекту Image, в свойстве Rect в моей ViewModel в надежде реализовать это с помощью привязки данных. Я просто не знаю, как переместить сетку в нужное место. Как я могу это сделать?


person Robert Oschler    schedule 05.02.2014    source источник
comment
Если миниатюра имеет поля (TopMargin и LeftMargin), я предполагаю, что вы можете использовать эти   -  person Schuere    schedule 05.02.2014
comment
@Schuere Разве эти значения не относятся к хост-контейнеру?   -  person Robert Oschler    schedule 05.02.2014
comment
правильно, но когда вы затем добавляете сетку в A: хост-контейнер, тогда как поле такое же; или B: указанный выше контейнер, тогда как сумма ваших полей является правильной точкой (я думаю)   -  person Schuere    schedule 05.02.2014


Ответы (1)


пример:

.A----------------------------
|    .B-----  .C----          |
|    |      | |     |         |
|    |      | |     |         |
|    |      | |     |         |
|     ------   -----          |
|                             |
|                             |
 ----------------------------

где .A представляет собой поле вашего хоста, а .B представляет собой поле миниатюры, а C также закрывает миниатюру.

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

A.TopMargin = 50 и LeftMargin = 90 B.TopMargin = 5 и leftMargin = 35 C.TopMargin = 5 и LeftMargin = 95

Для кода:

BThum = YourSelectedThumbNailAtThatMoment; //either B or C
Grid.TopMargin = AHost.TopMargin + BThum.TopMargin;
Grid.LeftMargin = AHost.LeftMargin + BThum.LeftMargin;
person Schuere    schedule 05.02.2014