我正在为我的应用程序使用MVVM设置,并使用scrollViewer在地图上滚动。在这张地图上,我有一个单元,当我选择它时,我想四处移动。但是,当我选中该单元时,我的ScrollViewer仍然处于激活状态,有没有办法绕过或停用ScrollViewer,这样我就可以四处移动该单元。我已经尝试过将ManipulationModeProperty更改为Control,但当我移动它时,这会使单位滞后。
我的滚动查看器是:
<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);
}
我最终自己找到了这个问题的解决方案。因为我将ManipulationMode设置为control,所以我想我禁用了一些属性,这些属性最终会在移动对象时产生滞后。因此,当我移动我的对象时,我最终尝试制作一个故事板,这解决了这个问题,并在我选择要移动的对象时给我一个很好的平滑运动。我所做的是进入我的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/作为引导线。每当我选择对象并激活ManipulationDelta 时,就会发生ManDelta
该单元是否具有Zindex的属性?如果是,请设置Scrollviewer的Zindex,并尝试将单位Zindex设置为高于Scrollviewers的值。
创建一个名为MyMap的全局Map变量怎么样。
当您导航到包含您的地图的页面并执行(App.Current as App)时。MyMap=//您在该页面上的地图。
当你按下鼠标并在"当我选择单位"中触发时,你会阻止中地图的所有移动余量
(App.Current as App).MyMap.IsScrollable = false; //or something like that.
因此,当你的"UNIT"处于MouseDown状态时,地图无法滚动,只有"UNIT"是可移动的。在鼠标上的"单位"撤销:
(App.Current as App).MyMap.IsScrollable = true;