WPF中使用代码后台实现画布缩放

5
这里的情景是:
我有一个画布,上面有不同的图表。现在的需求是使用C#或VB的代码来缩放画布。此外,我需要将缩放代码放在某个dll中,以便在整个应用程序中重复使用相同的代码集。
现在我的问题是如何做到这一点......
我尝试了以下代码,请看看...
public MainWindow()
{
    InitializeComponent();

    canvas.MouseEnter += new MouseEventHandler(canvas_MouseEnter);
    canvas.MouseWheel += new MouseWheelEventHandler(canvas_MouseWheel);
}

void canvas_MouseWheel(object sender, MouseWheelEventArgs e)
{
    double height = canvas.ActualHeight;
    double width = canvas.ActualWidth;
    double zoom = e.Delta;
    height += 2;
    width += 2;
    ScaleTransform sc = new ScaleTransform(width, height);
    canvas.LayoutTransform = sc;
    canvas.UpdateLayout();
}

4
听起来你应该查一下如何使用ScaleTransform,但你还没有提出问题。 - Eric Mickelsen
亚,Eric...我已经尝试了比例变换,这是我想在鼠标滚轮事件被调用时执行的代码。 - Prabhanjan Kumar Mahapatra
<code>double height = canvas.ActualHeight; double width = canvas.ActualWidth;double zoom = 5;height += zoom; width += zoom;canvas.LayoutTransform = new ScaleTransform(height, width);</code> - Prabhanjan Kumar Mahapatra
2个回答

5
尝试实现此示例:

请尝试实现这个示例:

    var canvas = new Canvas();
    var st = new ScaleTransform();
    var textBox = new TextBox {Text = "Test"};
    canvas.RenderTransform = st;
    canvas.Children.Add(textBox);
    canvas.MouseWheel += (sender, e) =>
    {
        if (e.Delta > 0)
        {
            st.ScaleX *= 2;
            st.ScaleY *= 2;
        }
        else
        {
            st.ScaleX /= 2;
            st.ScaleY /= 2;
        }
    };

很好,谢谢。我还会按相同比例缩放画布的高度和宽度,这样缩放不会将文本框缩出画布。 - J W

3

1
WPF扩展具有出色的缩放控件 - 快速且易于使用! - honzakuzel1989

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接