在ScrollViewer中捕获Canvas的指针移动事件

时间:2014-01-17 04:30:22

标签: xaml windows-8 microsoft-metro windows-8.1

我有一个Canvas覆盖PointerMoved事件,如果用户“绘制”它就会做一些事情。现在,我正在尝试将Canvas移到ScrollViewer内,以添加完美的缩放和滚动效果。

    <ScrollViewer x:Name="MainScrollViewer" Grid.Column="1"
                  VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" 
                  ZoomMode="Enabled" MinZoomFactor="0.5" MaxZoomFactor="2.0" >
        <Canvas x:Name="MainCanvas" Background="#000000" 
                HorizontalAlignment="Left" VerticalAlignment="Top" 
                PointerMoved="MainCanvas_PointerMoved" />
    </ScrollViewer>

然而,ScrollViewer捕获了所有指针移动事件,这导致主要的绘制程序不再起作用。

有关如何解决这个问题的想法吗?

2 个答案:

答案 0 :(得分:2)

  

在仍允许缩放/平移的同时使用触摸绘图 - 目前XAML不支持此功能。您需要关闭缩放/平移以便能够使用Pointer事件进行绘制,并且无法在自定义操作的同时获得系统缩放和平移行为。但是,您可以通过设置ManipulationMode = All来尝试使用Manipulation事件,并手动使用Scale和Translate值处理两个手指滚动和捏缩放。

详情请见:Touch based drawing app with a Canvas inside a ScrollViewer

我没有使用canvas和scrollview,但我认为我发现它会帮助你:)

答案 1 :(得分:0)

有一招!您可以添加工具按钮(如手)以切换两个条件。

  1. 第一个条件启用绘图:您可以禁用ScrollViewer的Horizo​​ntalScrollMode和VerticalScrollMode,它使您能够使用Canvas的指针事件。
  2. 在第二个中你应该为ScrollViewer启用Horizo​​ntalScrollMode和VerticalScrollMode,它可以工作!
  3. 以编程方式更改ScrollViewer属性:

     MainScrollViewer.HorizontalScrollMode = ScrollMode.Auto;
     MainScrollViewer.VerticalScrollMode = ScrollMode.Auto;
     MainScrollViewer.ZoomMode = ZoomMode.Enabled;