限制操作Delta两指触摸

ShedSpotter

在WPF中,我有一个网格,其中包含我需要使用两个手指触摸手势进行操作的内容。下面的代码可以很好地用于移动和缩放,但是我需要知道如何限制最大和最小缩放值,例如100%到200%缩放。另外,我需要限制内容的移动,以使其保持在网格容器的大小之内。

到目前为止的代码:

Private Sub gridLeft_ManipulationStarting(发送方为对象,e为ManipulationStartingEventArgs)处理gridLeft.ManipulationStarting

e.ManipulationContainer = gridMapHolderLeft
e.Mode = ManipulationModes.Scale + ManipulationModes.Translate
e.Handled = True
MyBase.OnManipulationStarting(e)

结束子

私有子gridLeft_ManipulationDelta(发送方为对象,e为ManipulationDeltaEventArgs)处理gridLeft.ManipulationDelta

Dim element As UIElement = TryCast(e.Source, UIElement)
Dim xform As MatrixTransform = TryCast(element.RenderTransform, MatrixTransform)
Dim matrix As Matrix = xform.Matrix
Dim delta As ManipulationDelta = e.DeltaManipulation
Dim center As Point = e.ManipulationOrigin
matrix.Translate(-center.X, -center.Y)
matrix.Scale(delta.Scale.X, delta.Scale.Y)
matrix.Translate(center.X, center.Y)
matrix.Translate(delta.Translation.X, delta.Translation.Y)
xform.Matrix = matrix
e.Handled = True
MyBase.OnManipulationDelta(e)

结束子

寡头

您可以通过检查结果矩阵来限制比例尺。应用比例尺后的行列式值。如果该值大于最大值或小于最小比例值,则可以在应用矩阵之前简单地从Sub中返回。

在此示例中,最小值是无缩放比例(1.0),最大值是2x缩放比例(2.0)。

(请原谅我的VB代码-99.9%的时间我是C#开发人员!)

Private Sub gridLeft_ManipulationDelta(sender As Object, e As ManipulationDeltaEventArgs) Handles gridLeft.ManipulationDelta

  Dim element As UIElement = TryCast(e.Source, UIElement)
  Dim xform As MatrixTransform = TryCast(element.RenderTransform, MatrixTransform)
  Dim matrix As Matrix = xform.Matrix
  Dim delta As ManipulationDelta = e.DeltaManipulation
  Dim center As Point = e.ManipulationOrigin
  matrix.Translate(-center.X, -center.Y)
  matrix.Scale(delta.Scale.X, delta.Scale.Y)
  matrix.Translate(center.X, center.Y)
  matrix.Translate(delta.Translation.X, delta.Translation.Y)

  If matrix.Determinant >= 2.0 Or matrix.Determinant <= 1.0 Then
     Return
  End If

  xform.Matrix = matrix
  e.Handled = True
  MyBase.OnManipulationDelta(e)

End Sub

我正在重构提供这些功能的WPF行为它是用C#而不是VB编写的-但是您可能会对查看源代码感兴趣。特别是'ManipulationDeltaHandler'方法中的代码

那里也有代码检查缩放元素与容器元素之间的界限,以防止您将内容推入或缩放到视线之外。

我最终写了这个行为,因为Microsoft提供的TranslateZoomRotateBehavior并没有满足我们的要求。

我希望那里能有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何禁用两指/右键单击触摸板?

来自分类Dev

如何禁用两指/右键单击触摸板?

来自分类Dev

触摸板-两根手指滚动

来自分类Dev

用两个手指触摸屏?

来自分类Dev

删除触摸板的两指,右键单击

来自分类Dev

按键不再重复,触摸板点击和触摸板两指滚动不再起作用

来自分类Dev

按键不再重复,触摸板点击和触摸板两指滚动不再起作用

来自分类Dev

XServer触摸屏,一根手指而不是两根手指滚动

来自分类Dev

为触摸板同时启用边缘滚动和两指滚动

来自分类Dev

为触摸板同时启用边缘滚动和两指滚动

来自分类Dev

触摸板双击和两指滚动不适用于Ubuntu 17.04

来自分类Dev

用于 UWP 触摸应用的 GridView 上的两指滑动手势

来自分类Dev

如何限制触摸输入?

来自分类Dev

除了两指滚动以外,Synaptics触摸板还有其他手势吗?

来自分类Dev

除了两指滚动以外,Synaptics触摸板还有其他手势吗?

来自分类Dev

如何测试我的触摸板是否支持两个以上的手指手势?

来自分类Dev

如何使用自定义快捷键切换两个手指的触摸板?

来自分类Dev

Synaptics触摸板驱动程序(Logitech T650):如何在尝试两指滚动时解决误报?

来自分类Dev

仅当两个触摸都在同一个窗格中时,如何启用双指缩放

来自分类Dev

IE11触摸设备上的一根手指滚动与两根手指滚动之间的区别

来自分类Dev

触摸取消IB操作

来自分类Dev

延迟对触摸端的操作

来自分类Dev

触摸取消IB操作

来自分类Dev

触摸从 2 个手指开始

来自分类Dev

触摸精灵时执行操作

来自分类Dev

联想ThinkPad X1 Carbon有时在睡眠后有时无法使用触摸板的两个手指滚动

来自分类Dev

联想ThinkPad X1 Carbon有时在睡眠后有时无法使用触摸板的两个手指滚动

来自分类Dev

如何在ubuntu 19.10中将两只手指的触摸板配置为中键?使用libinput

来自分类Dev

如何限制触摸次数从Swift Spritekit开始

Related 相关文章

  1. 1

    如何禁用两指/右键单击触摸板?

  2. 2

    如何禁用两指/右键单击触摸板?

  3. 3

    触摸板-两根手指滚动

  4. 4

    用两个手指触摸屏?

  5. 5

    删除触摸板的两指,右键单击

  6. 6

    按键不再重复,触摸板点击和触摸板两指滚动不再起作用

  7. 7

    按键不再重复,触摸板点击和触摸板两指滚动不再起作用

  8. 8

    XServer触摸屏,一根手指而不是两根手指滚动

  9. 9

    为触摸板同时启用边缘滚动和两指滚动

  10. 10

    为触摸板同时启用边缘滚动和两指滚动

  11. 11

    触摸板双击和两指滚动不适用于Ubuntu 17.04

  12. 12

    用于 UWP 触摸应用的 GridView 上的两指滑动手势

  13. 13

    如何限制触摸输入?

  14. 14

    除了两指滚动以外,Synaptics触摸板还有其他手势吗?

  15. 15

    除了两指滚动以外,Synaptics触摸板还有其他手势吗?

  16. 16

    如何测试我的触摸板是否支持两个以上的手指手势?

  17. 17

    如何使用自定义快捷键切换两个手指的触摸板?

  18. 18

    Synaptics触摸板驱动程序(Logitech T650):如何在尝试两指滚动时解决误报?

  19. 19

    仅当两个触摸都在同一个窗格中时,如何启用双指缩放

  20. 20

    IE11触摸设备上的一根手指滚动与两根手指滚动之间的区别

  21. 21

    触摸取消IB操作

  22. 22

    延迟对触摸端的操作

  23. 23

    触摸取消IB操作

  24. 24

    触摸从 2 个手指开始

  25. 25

    触摸精灵时执行操作

  26. 26

    联想ThinkPad X1 Carbon有时在睡眠后有时无法使用触摸板的两个手指滚动

  27. 27

    联想ThinkPad X1 Carbon有时在睡眠后有时无法使用触摸板的两个手指滚动

  28. 28

    如何在ubuntu 19.10中将两只手指的触摸板配置为中键?使用libinput

  29. 29

    如何限制触摸次数从Swift Spritekit开始

热门标签

归档