2011-03-04 75 views
0

我在窗口的右下方有一个ListBox,我想在此ListBox的最左侧放置一个Label如何将控件附加到WPF中的其他控件?

目前我使用的是DockPanel停靠ListBox到窗口的右下方,但我不知道如何“组”标签和ListBox在一起,使他们呆在一起。

我是否必须使用硬编码边距来实现这一点,以便它们看起来都是连在一起的?

此外,我应该使用什么控制来做到这一点? StackPanelDockPanel等?

回答

3

嵌套另一个DockPanel。将您的标签作为第一个孩子,并将其停靠在顶部。把你的ListBox作为第二个孩子;它将填补剩余的空间。

<DockPanel Name="YourExistingDockPanel"> 
    ... 
    <DockPanel> 
     <Label DockPanel.Dock="Top" Content="YourLabel"/> 
     <ListBox .../> 
    </DockPanel> 
    ... 
</DockPanel> 
+0

谢谢我这样做但是标签仍然停留在窗口的顶部,列表框看起来居中。但都看起来像他们停靠在屏幕的右侧。 – 2011-03-04 23:48:23

+0

还是需要设置DockPanel的高度? – 2011-03-04 23:53:03

+0

Joe有正确的方法将Label和ListBox合并为一个单元。其余的依赖于你如何在Dock的其他部分嵌入DockPanel。在外面的DockPanel里面,你有Dock = Right但是没有'BottomRight' – 2011-03-04 23:56:51

2

将两个控件放入一个单元格Grid中,并在每个属性上设置Margin属性以将它们完全放置在单元格内。这将允许你将Grid内的两个控件“粘合”在一起(你可以控制它们的大小和它们在单元格内的位置,这样粘在一起),它将起到“石斑鱼”的作用。

然后,您可以使用任何您想要的方式(例如DockPanel)将网格放置在任何你喜欢的位置。里面的两个控件将移动,但始终保持在一起。

如果您不需要像素完美的绝对定位,如果您使用StackPanel而不是Grid,则同样的技术也可以工作。在这种情况下,您将受到StackPanel可实现的布局的限制。

+0

谢谢,所以网格将在DockPanel内?另外为什么使用绝对位置? – 2011-03-04 23:42:32

+1

对保证金进行硬编码似乎是个不错的主意。如果您对保证金进行硬编码,则在字体更改或文字换行时不会更新。另外,你必须猜测右边缘。 – 2011-03-04 23:42:54

+1

@Joan:我已经扩展了答案。 – Jon 2011-03-04 23:46:37

相关问题