C# 在ZoomableCanvas中使用视口时围绕点缩放?
多亏了Kael Rowan,您可以在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大
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;
}