【问题标题】:How to get canvas content size in wpf?如何在 wpf 中获取画布内容大小?
【发布时间】:2015-03-31 00:34:18
【问题描述】:

我有以下画布:

<Canvas Width="800" Height="600">
    <Rectangle Fill="#FF333333" Height="124" Width="500" 
               Canvas.Bottom="0" />
    <Rectangle Fill="#FF333333" Height="124" Width="500"
               Canvas.Bottom="150" Canvas.Left="150"/>
    <Rectangle Fill="#FF333333" Height="124" Width="500" 
               Canvas.Bottom="300"/>
</Canvas>

我想获取矩形组占用的矩形空间的大小(宽度和高度)。 在上面的示例中,我期待这些值:

ContentWidth = 650 (= 500 + 150)
ContentHeight = 424 (= 300 + 124)

ActualWidth 和 ActualHeight 分别返回 800 和 600,这不是我想要的。 有什么想法吗?

【问题讨论】:

  • 首先想到的是简单地循环遍历Canvas.Children,计算4条边,并从中创建一个矩形。我不确定是否有更简单的方法,因为 Canvas 通常不关心它包含什么孩子,所以可能没有任何东西可以监控它们的大小。
  • 这将是一种手动方法。不是我想要的。它可能会很烦人(我也很懒;))因为我可能会添加更多形状,如旋转三角形、线条等。我希望我能得到“绘制区域”的大小。没有更自动的方法吗?喜欢使用特定的属性?

标签: c# wpf canvas


【解决方案1】:

恐怕你想要的这个,需要手动计算。问题是Canvas 是一个没有DesiredHeightDesiredWidth 的面板,这意味着它不会计算孩子的宽度/高度来为其建议所需的尺寸。

您可以像:Rachel 所说的那样计算它,或者您可以创建一个具有您想要的矩形属性的新面板(类似于CustomCanvas)。

希望这些提示对您有所帮助...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 2016-03-27
    • 2019-06-23
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多