【问题标题】:Canvas zooming in WPF using code behind使用隐藏代码在 WPF 中放大画布
【发布时间】:2021-08-09 14:05:15
【问题描述】:

这里的场景是:


我有一个画布,上面画着不同的图表。现在的要求是使用 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();
}

【问题讨论】:

  • 听起来你应该看看如何使用 ScaleTransform,但你还没有提出任何问题。
  • Ya Eric....我已经尝试过缩放变换,这是我想要在调用 mouseWheel 事件时执行的代码...
  • 双倍高度 = canvas.ActualHeight;双倍宽度 = canvas.ActualWidth;双倍变焦 = 5;高度 += 缩放;宽度 += 缩放; canvas.LayoutTransform = new ScaleTransform(height, width); 代码

标签: c# wpf canvas


【解决方案1】:

尝试实现这个示例:

    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;
        }
    };

【讨论】:

  • 太好了,谢谢。我还以相同的速率缩放画布的高度和宽度,因此缩放不会将文本框缩小到画布之外。
【解决方案2】:

我相信您正在寻找的是缩放行为Behaviors are objects that encapsulate some form of interactive behavior。我已经看到了几个“缩放行为”示例,您应该可以将它们用于您的项目。您应该能够使用或修改以下其中一项...

【讨论】:

  • WPF Extensions 具有出色的缩放控制 - 快速且易于使用!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-19
  • 2010-10-20
  • 2011-04-21
  • 2023-04-09
相关资源
最近更新 更多