32

如何在 WPF 中相对定位元素?标准模型是对所有内容都使用布局管理器,但是如果您想简单地根据其他元素的位置来定位元素(例如在 Canvas 上)怎么办?

例如,您可能希望将一个元素(例如按钮)附加到另一个元素(可能是面板)的侧面,而与该面板的位置或布局无关。任何使用过工程工具(SolidWorks、AutoCad 等)的人都熟悉这种相对定位。

将所有内容强制放入布局管理器(不同的 WPF 面板)对于某些场景没有多大意义,在这些场景中,您不关心元素由某个父容器维护,并且您不希望其他子容器受到更改的影响彼此的布局/外观。WPF 是否以任何方式支持这种相对定位模型?

4

2 回答 2

15

您可以在画布上放置一个堆栈面板,水平对齐,然后将两个按钮放在那里,而不是直接在画布上放置(如您的示例中)按钮。

像这样:

<Canvas>
  <StackPanel Canvas.Left="100" Canvas.Top="100" Orientation="Horizontal">
    <Button>Button 1</Button><Button>Button 2</Button>
  </StackPanel>
</Canvas>

替代文字

我认为当您在一个表单中使用多个布局时它非常灵活,并且您可以创建几乎任何您想要的配置。

于 2008-10-02T09:42:35.490 回答
11

好问题。据我所知,我们需要有一个不同的自定义面板来获得这个功能。由于 WPF 基于视觉层次结构,因此无法为平台中的元素提供这种平面结构。

但这里有一个技巧来做到这一点。 将元素放置在相同位置并使用 RenderTransform.TranslateTransform 进行相对位移。这样,您的 TranslateTransfrom 的 X 和 Y 将始终与其他元素相关。

于 2008-10-01T15:32:57.263 回答