繁体   English   中英

在ZoomableCanvas中使用Viewbox时围绕点进行缩放吗?

[英]Zooming about point when using a Viewbox inside a ZoomableCanvas?

感谢Kael Rowan,您可以轻松地在WPF创建可缩放的画布。 可以在此博客条目的底部下载示例项目

现在,我需要修改此示例项目以使用其Viewbox功能。 MainWindow.xaml ,如下设置ViewboxStretchApplyTransform属性:

<ZoomableCanvas ... Viewbox="0 0 400 400" Stretch="Fill" ApplyTransform="True" />

问题

启用此功能后,使用鼠标滚轮进行缩放不会围绕鼠标位置进行缩放。 相反,它似乎会缩放(0,0)。 这段代码(在鼠标滚轮处理程序中) 无需 Viewbox

// Adjust the offset to make the point under the mouse stay still.
var position = (Vector)e.GetPosition(MyListBox);
MyCanvas.Offset = (Point)((Vector)(MyCanvas.Offset + position) * x - position);

如何使用 Viewbox 这真让我发疯! 数学/ WPF专家在那里,请帮助!

试试这个代码

protected override void OnMouseWheel(MouseWheelEventArgs e)
{ 
    var position = e.GetPosition(this.MyCanvas);

    var pre = this.MyCanvas.TransformToAncestor(this).Transform(position);

    var x = Math.Pow(2, e.Delta / 3.0 / Mouse.MouseWheelDeltaForOneLine);
    MyCanvas.Scale *= x;

    var cur = this.MyCanvas.TransformToAncestor(this).Transform(position);

    var offset = (cur - pre);

    this.MyCanvas.Offset += offset;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM