【问题标题】:General way of setting element bounds设置元素边界的一般方法
【发布时间】:2010-12-02 17:30:47
【问题描述】:

我正在编写一个应用程序,它基本上是一个非常类似于 Expression Blend 或 Visual Studio 设计器的设计器。所以基本上在设计表面上有一堆 UI 元素,你可以做诸如拖放、调整大小、旋转等操作。

主容器控件,即设计表面可以是任何从 Panel 派生的控件,包括 Canvas、Grid 等控件。这种情况意味着支持任何 Panel 派生控件作为设计表面,这会引发问题无论面板控件的 ptype 是什么,我都需要找到一种通用方法来设置该表面上子控件的大小和位置。

我使用 UIElement.Arrange() 调用来移动/调整控件的大小,这很有效,但是一旦父面板控件的布局更新,例如当您调整它的大小时,我的所有更改都会重置为默认值。我也知道 WPF 面板控件中当前的 2 遍布局逻辑,但我无法从控件派生并用作背景对象。

简而言之,有没有一种通用的方法来实现我想要的,在面板派生控件中设置子控件的大小/位置,正如我所见,Blend/VS Designer 确实认识到如何在面板派生控件中定位控件?或者它们是否也针对已知的 Panel 派生控件进行了硬编码?

提前谢谢...

奥兹登

【问题讨论】:

    标签: wpf layout drag-and-drop panel


    【解决方案1】:

    您是否尝试过更改子控件的边距,这将让您更改它的位置。我不认为这是最好的方法,但它会起作用。

    【讨论】:

    • 感谢您的回复...对于网格控件,Margin 使用如您所说。但是,例如,当您在 Blend 中使用 Canvas 时,它会设置 Canvas.Left 属性。我只是想了解是否有一种通用的方法可以理解父级的能力并设置正确的属性进行定位。到目前为止,我所有的研究都表明这是不可能的,也许 blend/VS 也确实对此进行了硬编码。也许我应该改用 TranslateTransform,这是我在所有可能的场景中发现的唯一共同点。
    【解决方案2】:

    你不能这样做,不同面板类型的全部意义在于他们对孩子的定位不同。

    Canvas 专为手动控制大小和位置而设计,您可以在 Grid 上设置边距 - 但无法控制 StackPanel、WrapPanel 或 DockPanel(或几乎任何 WPF 示例集合中的径向面板)上的位置)

    【讨论】:

      猜你喜欢
      • 2014-04-28
      • 1970-01-01
      • 2021-08-29
      • 2022-06-20
      • 2012-10-20
      • 2011-06-22
      • 2015-04-24
      • 1970-01-01
      • 2019-09-26
      相关资源
      最近更新 更多