正在ScrollViewer中移动对象



我正在为我的应用程序使用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;

最新更新