Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在ZoomableCanvas中使用视口时围绕点缩放?_C#_Wpf_Zooming - Fatal编程技术网

C# 在ZoomableCanvas中使用视口时围绕点缩放?

C# 在ZoomableCanvas中使用视口时围绕点缩放?,c#,wpf,zooming,C#,Wpf,Zooming,多亏了Kael Rowan,您可以在WPF中轻松创建可缩放画布示例项目可在页面底部下载 现在,我需要修改这个示例项目以使用其Viewbox功能。在main window.xaml中,设置Viewbox、Stretch和ApplyTransform属性,如下所示: <ZoomableCanvas ... Viewbox="0 0 400 400" Stretch="Fill" ApplyTransform="True" /> 如何使用查看框使其工作?这简直快把我逼疯了!数学/WPF大

多亏了Kael Rowan,您可以在
WPF
中轻松创建可缩放画布示例项目可在页面底部下载

现在,我需要修改这个示例项目以使用其
Viewbox
功能。在
main window.xaml
中,设置
Viewbox
Stretch
ApplyTransform
属性,如下所示:

<ZoomableCanvas ... Viewbox="0 0 400 400" Stretch="Fill" ApplyTransform="True" />
如何使用
查看框
使其工作?这简直快把我逼疯了!数学/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;
}

谢谢你试过了吗?我不能让它工作。也许应该在鼠标滚轮处理程序中使用
Viewbox
属性?
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;
}