簡體   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