我有一个silverlight Canvas,它保存了一个带有绘图(多边形)的图像。我需要开发一个控件来缩放和平移这个画布在一个工作区(Border在一个Grid单元格内,截至目前),如下所示。什么是最好的方法来做到这一点。有没有我可以使用的库?我需要能够添加到绘图缩放/平移画布太。x1c 0d1x的数据
Canvas
Border
Grid
3z6pesqy1#
您可以尝试创建一个UserControl,它基本上是画布中的一个图像,并公开两个transform属性来控制缩放和平移。ScaleTransform将处理缩放,TranslateTransform将处理平移。您可以从这两个创建CompositeTransform并将其指定为画布的RenderTransform。您可以将缩放滑块绑定到ScaleTransform,并处理鼠标事件来更改TranslateTransform。只要您获得相对于画布本身的鼠标坐标,就应该可以工作(即mouseEventArgs.GetPosition(canvas))。
mouseEventArgs.GetPosition(canvas)
jvidinwx2#
在互联网上有很多代码示例。查看ZoomControl和CodePlex。
iswrvxsc3#
找到了一个有用的讨论与多个答案关于类似的问题。找到更详细的答案由伊恩奥克斯和其他人在pan-zoom-image-stackoverflow-answer。另一个很好的解决方案可以在阿什利戴维斯的代码项目中找到:A WPF Custom Control for Zooming and Panning。
3条答案
按热度按时间3z6pesqy1#
您可以尝试创建一个UserControl,它基本上是画布中的一个图像,并公开两个transform属性来控制缩放和平移。ScaleTransform将处理缩放,TranslateTransform将处理平移。您可以从这两个创建CompositeTransform并将其指定为画布的RenderTransform。
您可以将缩放滑块绑定到ScaleTransform,并处理鼠标事件来更改TranslateTransform。只要您获得相对于画布本身的鼠标坐标,就应该可以工作(即
mouseEventArgs.GetPosition(canvas)
)。jvidinwx2#
在互联网上有很多代码示例。查看ZoomControl和CodePlex。
iswrvxsc3#
找到了一个有用的讨论与多个答案关于类似的问题。找到更详细的答案由伊恩奥克斯和其他人在pan-zoom-image-stackoverflow-answer。
另一个很好的解决方案可以在阿什利戴维斯的代码项目中找到:A WPF Custom Control for Zooming and Panning。