在windows 8应用程序中通过鼠标平移

本文关键字:鼠标 windows 应用程序 | 更新日期: 2023-09-27 18:05:28

我正在开发一个windows 8应用程序,必须通过鼠标对图像进行平移。它可以在平板电脑上工作,但不知何故我也需要在鼠标上启用它。

我正在写指针轮改变事件缩放图像,但它只调用一次。
这是缩放

的代码
private void MyScrollView_PointerWheelChanged(object sender, PointerRoutedEventArgs e)
{
    MyScrollView.ChangeView(MyScrollView.HorizontalOffset + 40, MyScrollView.VerticalOffset + 20, MyScrollView.ZoomFactor + 0.1f);
}

在windows 8应用程序中通过鼠标平移

我在尝试做同样的事情时遇到了同样的问题。只要Scrollviewer不在内部处理滚动事件,您的代码就可以工作。

更详细地解释:
当Scrollviewer的所有内容都可见时(即不需要滚动),Scrollviewer将不会在内部处理任何滚动事件,事件将触发,您可以在代码中处理它。

但是,如果内容大于Scrollviewer的可见区域,则会显示滚动条。此时,Scrollviewer将处理滚动事件(以便在滚动时移动滚动条)。这是预期的行为,就像在web浏览器和其他内容大于视口或可见区域的应用程序中一样。事件将不再触发,处理程序将不再运行,因为内部逻辑会阻止事件到达您的代码。

您可以通过将e.Handled设置为true来捕获事件,如下所示:

private void MyScrollView_PointerWheelChanged(object sender, PointerRoutedEventArgs e)
{
    e.Handled = true; // Tell the event system that the event has been handled and it should not execute any more handlers.
    MyScrollView.ChangeView(MyScrollView.HorizontalOffset + 40, MyScrollView.VerticalOffset + 20, MyScrollView.ZoomFactor + 0.1f);
}

但我发现这是一次糟糕的经历。缩放不是以指针为中心,而是以一种令人困惑和不和谐的方式移动内容。我没有找到好的方法来重写这个

作为最后一点,我想提到的是,通过使用Ctrl+Scroll, Scrollviewer中有内置的缩放功能。效果很好,与浏览器中的快捷方式相同。