使用鼠标和触摸在 ScrollViewer 中的 Canvas 中绘制矩形

问题描述 投票:0回答:2
c# xaml windows-runtime win-universal-app
2个回答
0
投票

当 ScrollViewer 接收到基于触摸的 PointerPressed 时,它会转向直接操作以响应地处理平移和缩放。直接操作捕获指针输入,因此 Canvas 的 PointerMoved 和 PointerReleased 事件不会触发。没有事件 -> 没有绘图。

ScrollViewer 使用鼠标平移或缩放,因此鼠标事件可以到达画布。

假设您总是希望 Canvas 处理指针事件而不是滚动(也许 Grid 中还有其他控件使用 ScrollViewer),您可以将 Canvas 的 ManipulationMone 设置为 all 以让 Canvas 块上的触摸触摸滚动查看器

<Canvas x:Name="cvWorkSpace"
    Background={ThemeResource WorkSpaceBackgroundBrush}
    Tapped="svWorkSpace_Tapped"
    ManipulationMode="All"
    PointerPressed="svWorkSpace_PointerPressed"
    PointerMoved="svWorkSpace_PointerMoved"
    PointerReleased="svWorkSpace_PointerReleased"/>

如果您只是有时希望 Canvas 处理指针事件,那么您可以将 ManipulationMode 切换回 System,让 ScrollViewer 处理它。如果您想通过单点触摸在画布上绘图并通过多点触摸平移/缩放,那么您可以处理画布上的操纵事件以平移和缩放。

还要确保画布不透明,并让指针事件传递到其后面的任何内容。如果你想在图像上绘图,你可以设置一个 ImageBrush,将图像作为 Canvas 的背景,而不是使用单独的 Image 控件。


0
投票

10年前的一个答案现在对我有帮助。非常感谢。

© www.soinside.com 2019 - 2024. All rights reserved.