【问题标题】:Capturing Pointer Move Events for Canvas inside ScrollViewer在 ScrollViewer 中为 Canvas 捕获指针移动事件
【发布时间】:2014-01-17 04:30:21
【问题描述】:

我有一个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 捕获了所有指针移动事件,这导致主绘制过程不再工作。

知道如何解决这个问题吗?

【问题讨论】:

  • 尝试将 VerticalScrollBarVisibility 和 Horizo​​ntalScrollBarVisibility 设置为 Disabled?
  • 拥有滚动和缩放功能是我首先添加ScrollViewer 的原因! :)
  • 我的意思是,如果设置为 Disabled,Zoom 仍然有效,PointerMoved 无效?

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


【解决方案1】:

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

查看更多信息:Touch based drawing app with a Canvas inside a ScrollViewer

我没有使用画布和滚动视图,但我认为我找到的对你有帮助:)

【讨论】:

    【解决方案2】:

    有个窍门!您可以添加一个工具按钮(如手)以在两种情况下进行切换。

    1. 第一个条件启用绘图:您可以禁用 ScrollViewer 的 Horizo​​ntalScrollMode 和 VerticalScrollMode,这使您能够使用 Canvas 的指针事件。
    2. 在第二个中,您应该为 ScrollViewer 启用 Horizo​​ntalScrollMode 和 VerticalScrollMode,它可以工作!

    以编程方式更改 ScrollViewer 属性:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-26
      相关资源
      最近更新 更多