【问题标题】:Zooming into a Canvas without modifying the size of specific child controls在不修改特定子控件大小的情况下放大 Canvas
【发布时间】:2011-08-26 00:09:11
【问题描述】:

所以我意识到我在这里冒险超出了 Canvas 的预期用途,并且可能不得不提出一个更加手动的解决方案。但是,由于在 WPF 方面没有过多经验,我希望有一些解决方案可以让我继续使用 Canvas 控件及其免费提供的功能。

问题围绕着用于放大和缩小图像的 Canvas 以及属于 Canvas 的一些子控件。这些子控件将放置在图像上的不同位置,因此,Canvas 可以很好地工作,因为它可以在我放大或缩小时为我处理所有布局/定位。

但是,一个缺点是,当我放大图像时,Canvas 会放大这些子控件,导致它们变得太大而无法在实践中使用。我正在寻找一种解决方案,它允许我放大属于画布的图像,而无需放大子控件的大小,最好为我处理布局。

我已经尝试随着缩放因子的增加或减少而修改这些子控件的宽度和高度,但是会有一点延迟,而且看起来有点“生涩”。

如果归根结底,我将自己完成所有缩放/平移/布局,但我想我会先问一下,以确保我没有遗漏任何可以让我告诉 Canvas 不要缩放某些控件的大小。提前致谢。

【问题讨论】:

    标签: wpf zooming


    【解决方案1】:

    您可以将孩子的 RenderTransform 绑定到 Canvas 变换的逆,请参阅我对 this similar question on rotation 的回答。

    【讨论】:

    • 非常感谢您在这里的回答,看起来正是我所需要的。
    【解决方案2】:

    这与其说是一个答案,不如说是一个想法,但是如果你在你不想缩放的元素上设置一个与画布本身相反的变换怎么办。例如,如果画布具有 2.0 的缩放变换,则将元素设置为具有 0.5 的缩放变换。您可以通过使用值转换器将转换值绑定在一起来完成此操作。

    您可能需要确保元素的渲染变换原点为 0.5,0.5,以便它从中心缩放。

    【讨论】:

    • 好主意!我想这会很好,我会很快尝试,但我无法想象它不会奏效。再次感谢,现在为我返回非 ui 代码 :)
    猜你喜欢
    • 1970-01-01
    • 2019-11-13
    • 2021-06-10
    • 1970-01-01
    • 2018-08-25
    • 1970-01-01
    • 2015-08-11
    • 2014-01-21
    • 2013-02-24
    相关资源
    最近更新 更多