我在窗口的右下方有一个ListBox
,我想在此ListBox
的最左侧放置一个Label
。如何将控件附加到WPF中的其他控件?
目前我使用的是DockPanel
停靠ListBox
到窗口的右下方,但我不知道如何“组”标签和ListBox
在一起,使他们呆在一起。
我是否必须使用硬编码边距来实现这一点,以便它们看起来都是连在一起的?
此外,我应该使用什么控制来做到这一点? StackPanel
,DockPanel
等?
我在窗口的右下方有一个ListBox
,我想在此ListBox
的最左侧放置一个Label
。如何将控件附加到WPF中的其他控件?
目前我使用的是DockPanel
停靠ListBox
到窗口的右下方,但我不知道如何“组”标签和ListBox
在一起,使他们呆在一起。
我是否必须使用硬编码边距来实现这一点,以便它们看起来都是连在一起的?
此外,我应该使用什么控制来做到这一点? StackPanel
,DockPanel
等?
嵌套另一个DockPanel。将您的标签作为第一个孩子,并将其停靠在顶部。把你的ListBox作为第二个孩子;它将填补剩余的空间。
<DockPanel Name="YourExistingDockPanel">
...
<DockPanel>
<Label DockPanel.Dock="Top" Content="YourLabel"/>
<ListBox .../>
</DockPanel>
...
</DockPanel>
将两个控件放入一个单元格Grid
中,并在每个属性上设置Margin
属性以将它们完全放置在单元格内。这将允许你将Grid
内的两个控件“粘合”在一起(你可以控制它们的大小和它们在单元格内的位置,这样粘在一起),它将起到“石斑鱼”的作用。
然后,您可以使用任何您想要的方式(例如DockPanel
)将网格放置在任何你喜欢的位置。里面的两个控件将移动,但始终保持在一起。
如果您不需要像素完美的绝对定位,如果您使用StackPanel
而不是Grid
,则同样的技术也可以工作。在这种情况下,您将受到StackPanel
可实现的布局的限制。
谢谢,所以网格将在DockPanel内?另外为什么使用绝对位置? – 2011-03-04 23:42:32
对保证金进行硬编码似乎是个不错的主意。如果您对保证金进行硬编码,则在字体更改或文字换行时不会更新。另外,你必须猜测右边缘。 – 2011-03-04 23:42:54
@Joan:我已经扩展了答案。 – Jon 2011-03-04 23:46:37
谢谢我这样做但是标签仍然停留在窗口的顶部,列表框看起来居中。但都看起来像他们停靠在屏幕的右侧。 – 2011-03-04 23:48:23
还是需要设置DockPanel的高度? – 2011-03-04 23:53:03
Joe有正确的方法将Label和ListBox合并为一个单元。其余的依赖于你如何在Dock的其他部分嵌入DockPanel。在外面的DockPanel里面,你有Dock = Right但是没有'BottomRight' – 2011-03-04 23:56:51