我们如何在WPF中进行相对定位?
时间:2020-03-06 14:58:52 来源:igfitidea点击:
我们如何在WPF中相对定位元素?
标准模型是对所有内容使用布局管理器,但是如果仅想基于其他元素的位置来放置元素(例如,在Canvas上),该怎么办?
例如,我们可能希望将一个元素(例如一个按钮)连接到另一个元素(可能是面板)的侧面,而与该面板的位置或者布局无关。
使用工程工具(SolidWorks,AutoCad等)的任何人都熟悉这种相对定位。
在某些情况下,将所有内容强制放入布局管理器(不同的WPF面板)并没有多大意义,在这种情况下,我们不必关心元素是否由某个父容器维护,并且我们不希望其他子容器受到更改的影响。彼此的布局/外观。 WPF是否以任何方式支持此相对定位模型?
解决方案
好问题。据我所知,我们需要一个不同的自定义面板来获得此功能。由于WPF基于Visual Hierarchy,因此无法为平台中的元素提供这种Flat结构。
但这是一个技巧。
使用RenderTransform.TranslateTransform将元素放置在相同的位置并提供相对位移。这样,TranslateTransfrom的X和Y将始终与另一个元素相对应。
与其直接在画布上放置一个按钮(如示例),不如将一个堆栈面板水平放置在画布上,然后将两个按钮放置在画布上。
像这样:
<Canvas> <StackPanel Canvas.Left="100" Canvas.Top="100" Orientation="Horizontal"> <Button>Button 1</Button><Button>Button 2</Button> </StackPanel> </Canvas>
我认为当我们在一个表单中使用多个布局时,它是非常灵活的,并且我们可以创建几乎任何我们想要的配置。