【问题标题】:How to resize a Canvas in WPF?如何在 WPF 中调整画布的大小?
【发布时间】:2011-01-11 05:46:08
【问题描述】:

我正在编写一个 WPF 应用程序,其中包含 Canvas。此画布将在运行时自定义呈现。它有点像游戏,需要以像素为单位。我需要能够将我的Canvas 设置为 478x478 像素(客户矩形大小)。我不希望在我的Canvas 上执行任何缩放或其他与分辨率无关的步骤。

我不确定这在 WPF 中是否可行,因为它的本质是独立于分辨率。我的问题:

  1. 如何在运行时调整 Canvas 的大小(要调用的函数?)
  2. 当我调整Canvas 的大小时,可渲染区域(客户矩形)是否会变成那个大小?如果不是,我如何调整它的大小以确保客户矩形是特定的宽度/高度?
  3. 是否可以以像素为单位设置Canvas 的宽度/高度? WPF 的与分辨率无关的方面如何干扰我正在尝试做的事情?
  4. 当我调整 Canvas 的大小时,其他控件是否会按照 WPF 设计器中的设计方式适当调整大小?

提前致谢。

【问题讨论】:

    标签: c# .net wpf canvas resize


    【解决方案1】:

    调整大小是小菜一碟:

    MyCanvas.Width = 350;
    MyCanvas.Height  = 450;
    

    这设置大小,您可以渲染到此之外的坐标,但它会被剪裁。您可以将画布包裹在滚动条内,以允许用户查看画布高度/宽度之外的内容。

    至于您的其他问题,我想您可以查看this SO question 以获得您的答案

    【讨论】:

    • 只是为了澄清 OP:此代码将调整画布大小,但不会将其设置为 350x450 像素。 WPF 不使用像素作为大小单位,而是使用 96 英寸的部分;此代码将宽度设置为 3.64 英寸 x 4.68 英寸。
    • 我将大小设置为 478x478,但我没有注意到相对于画布底部定位的任何其他控件发生了变化。也许更改宽度/高度不会强制主窗口重做布局?还要记住,我在 Canvas 的构造函数中设置了宽度/高度。我希望这还不算早。
    • 当你在画布中定位某些东西时,它的坐标是相对于画布的。他们不会自动移动。您必须遍历子集合并手动调整。 :(
    【解决方案2】:

    位于画布中的任何元素都不会根据画布的大小调整大小或重新定位。所以我认为设置画布的大小没有任何好处。也许你应该设置一个固定大小的窗口。

    否则,只需设置 Canvas.Width、Height 和 ClipToBounds=True,您就有了一个固定大小的画布,它使用 X/Y 坐标定位其子元素。

    此外,您应该确保在画布上设置 SnapsToDevicePixels=True,以便子元素具有清晰的像素对齐边界。

    【讨论】:

    • +1。如果您需要内部元素以适应画布的约束,那么画布可能不是要使用的东西。手动设置尺寸的网格会更好。
    • 有点老了,用一个包裹Canvas的Viewbox是的。
    【解决方案3】:

    2020 年更新:在 WPF .NET CORE 上:如果 Canvas 是 Viewbox 的子级,则内容会自动缩放到 Viewbox 的高度和宽度。

      <Viewbox Stretch="Fill"
               Width="50"
               Height="50">
    
         <Canvas>
           <Path.... />
         </Canvas>
    
      </Viewbox>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-27
      • 1970-01-01
      • 2021-03-04
      • 1970-01-01
      相关资源
      最近更新 更多