2013-11-26 2 views
2

Я использую настройку MVVM для своего приложения, и я использую scrollViewer для прокрутки карты. На этой карте у меня есть единица, которую я бы хотел передвинуть, когда я ее выберу. Однако, когда я выбираю устройство, мой ScrollViewer все еще активирован, есть ли способ обойти scrollViewer или деактивировать его, чтобы я мог перемещать устройство. Я уже пытался изменить ManipulationModeProperty на Control, но thius делает отставание устройства, когда я его перемещаю.Перемещение объекта в ScrollViewer

Моего ScrollViewer является:

<ScrollViewer Width="768" Height="380" HorizontalScrollBarVisibility="Hidden"> 
     <View:Map/> 
</ScrollViewer> 

блока, где я применяю манипуляцию:

public void ManStart(ManipulationStartedEventArgs e) 
    { 

     myScrollViewer.SetValue(ScrollViewer.ManipulationModeProperty, ManipulationMode.Control); 

    public void ManDelta(ManipulationDeltaEventArgs e) 
    { 

     Point fingerPosition = e.DeltaManipulation.Translation; 

     Unit.x = fingerPosition.X + ChampModelSel.x; 
     Unit.y = fingerPosition.Y + ChampModelSel.y; 

    } 

public void ManCompleted(ManipulationCompletedEventArgs e) 
    { 

     var myScrollViewer = FindParentOfType<ScrollViewer>(ChampViewModel) as  ScrollViewer; 
     myScrollViewer.SetValue(ScrollViewer.ManipulationModeProperty, ManipulationMode.System); 

    } 
+0

Я не совсем уверен, но смотрю на захват мыши для элементов ui. –

+0

* Есть ли способ обойти scrollViewer или отключить его, чтобы я мог перемещать единица вокруг? * Да, это называется [Перетаскивание] (http://msdn.microsoft.com/en-us/library/ms742859 (v = vs.110) .aspx). – Sheridan

+0

@Sheridan Я пробовал по ссылке, которую вы добавили, но для windows phine я не могу получить DragDrop.DoDragDrop(), потому что мне не хватает использования или ссылки? – JonasN89

ответ

2

В итоге я нашел решение проблемы самостоятельно. Поскольку я установил ManipulationMode для управления, я предполагаю, что я отключу некоторые свойства, которые в конечном итоге дают задержку при перемещении вашего объекта. Поэтому я в конечном итоге пытался создать раскадровку, когда я перемещаю свой объект, что устраняет проблему и дает мне приятное плавное движение, когда я выбираю объект, который я хочу переместить. То, что я сделал, я вошел в мою ManDelta:

public void ManDelta(ManipulationDeltaEventArgs e) 
{ 

    Point fingerPosition = e.DeltaManipulation.Translation; 

    Unit.x = fingerPosition.X + ChampModelSel.x; 
    Unit.y = fingerPosition.Y + ChampModelSel.y; 

} 

и добавил некоторую раскадровку из кода позади, используя этот http://www.buzzfrog.se/index.php/2013/06/create-storyboards-in-code-for-windows-phone/ в качестве направляющей линии. ManDelta возникает каждый раз, когда я выбираю объект и активирую ManipulationDelta

0

есть ли блок свойство ZIndex? Если да, установите Zindex из Scrollviewer и попробуйте установить Unit ZIndex на более высокое значение, чем Scrollviewer.

+0

не работал, я использовал Canvas.Zindex для установки индекса z в scrollviewer, но не работал – JonasN89

0

Как насчет создания глобальной переменной Map можно назвать MyMap.

Когда вы переходите на страницу, содержащую вашу карту, и делаете (App.Curren as App) .MyMap = // вашу карту на странице.

Когда вы MouseDown и в настоящее время запускается в «при выборе блока» блокировать все движущиеся довольствие карты в

(App.Current as App).MyMap.IsScrollable = false; //or something like that. 

Так что карта не может прокручивать, когда ваш «единица» в состоянии MouseDown, и только «UNIT» был подвижным. И на MouseUp в «UNIT» отменить:

(App.Current as App).MyMap.IsScrollable = true; 
Смежные вопросы