你如何在WPF中做相对定位?

时间:2008-10-01 15:22:12

标签: wpf css-position

如何在WPF中相对定位元素? 标准模型是使用布局管理器来处理所有事情,但是如果你想简单地根据其他元素的位置来定位元素(例如在Canvas上)呢?

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

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

2 个答案:

答案 0 :(得分:14)

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

像这样:

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

alt text

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

答案 1 :(得分:10)

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

但这是一个诀窍。  将元素放在相同的位置,并使用RenderTransform.TranslateTransform进行相对位移。这样你的TranslateTransfrom的X和Y将永远与另一个元素相关。