【问题标题】:Create a simple zoom for touch screen device为触摸屏设备创建简单的缩放
【发布时间】:2018-05-05 01:35:31
【问题描述】:

我在向 WPF C# 应用程序添加捏缩放功能时遇到问题。

我已经有了一个很好用的鼠标滚轮缩放,我想用它作为起点。

这是我的代码,如您所见,获取光标位置和增量不起作用。

private void pdfViewer_touchZoom(object sender, TouchEventArgs e)
{
    e.Handled = true;

    int idx = pdfViewer.CurrentIndex;

    //Get cursor position (this isn't working)
    var mousePoint = e.GetPosition(this.pdfViewer); 

    [...]

    //Delta not working (mouse wheel negative value)
    if (e.Delta < 0 && pdfViewer.Zoom > 0.4) /
            zoomMinus();
    else if 
       [...]

}

【问题讨论】:

  • 有什么问题?对于触摸设备,您必须识别手势,请参阅msdn(感谢this answer)。
  • 谢谢,我会在白天检查一下,然后,我会回复你。

标签: c# wpf zooming


【解决方案1】:

当我将 MouseWheel 事件处理程序 连接到 .NET 5 WPF 中的 UIElement 时,它也会触发缩放手势:对于两指加宽(缩放)和-120 表示两指窄(缩小)

在 Xaml 中:

    <Image Name="ScoreImage" .. >

在后面的代码中:

       // ..... initialisations
       ScoreImage.MouseWheel += this.RaiseMyMapMouseWheel;
    }


    private void RaiseMyMapMouseWheel(object sender, MouseWheelEventArgs e)
    {
        if (e.Delta == 120 || e.Delta == -120)
        {
            Debug.WriteLine($"Zoom event {e.Delta}");
        } else
        {  
            Debug.WriteLine($"Wheel event {e.Delta}");
        }
    }

车轮事件的大小可以在 -2000 和 +2000 之间的任何位置,因此如果您确实想可靠地检测 120,请确保您连续测试几个,然后得出结论之前有缩放:

    private int countZoom = 0; 
    private void RaiseMyMapMouseWheel(object sender, MouseWheelEventArgs e)
    {
        if (e.Delta == 120 || e.Delta == -120)
        {
            countZoom++;
            if (countZoom>2) 
              { 
                Debug.WriteLine($"Zoom event {e.Delta}"); 
                countZoom = 1; 
              }
        } else
        {   
            countZoom=0;
            Debug.WriteLine($"Wheel event {e.Delta}");
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 1970-01-01
    • 2011-10-10
    • 2014-09-02
    • 2016-06-25
    相关资源
    最近更新 更多