我会经常使用这个:
<StackPanel>
<StackPanel Orientation="Horizontal">
<Label>Username:</Label>
<TextBox />
</StackPanel>
<StackPanel Orientation="Horizontal">
<Label>Password:</Label>
<PasswordBox />
</StackPanel>
</StackPanel>
但这是一种常见的情况,我觉得有一种方法可以减少加价。
此外,使用如此多的堆栈面板会对性能产生影响吗?
谢谢!
答案 0 :(得分:8)
我不知道为什么,但我已经非常喜欢DockPanel
了,我将它们用于你所描述的场景。
<DockPanel>
<Label Content="Username:"/>
<TextBox Text="Some Text"/>
</DockPanel>
longhand(和等效版本,因为左边是默认的停靠位置):
<DockPanel>
<Label DockPanel.Dock="Left" Content="Username:"/>
<TextBox DockPanel.Dock="Left" Text="Some Text"/>
</DockPanel>
此外,它的属性LastChildFill
默认为true
,使添加到其中的最后一个子项填充剩余空间(我喜欢此功能)。因此,在上面的示例中,TextBox
将填充剩余的可用水平空间。 (您可以通过将其切换为false来轻松关闭它)
希望有所帮助!!
答案 1 :(得分:3)
有两种主要方法, StackPanels 和网格定义,Grid
提供的标记不比StackPanel
少。我个人更喜欢使用网格定义。他们需要一段时间才能使用,并且我时不时地使用StackPanel
,但总体而言,当他们习惯使用时,他们会感觉更清洁。关于如何使用它们的Here is a great tutorial。
可能也有帮助的参考是WPF Grid Vs. StackPanel。
答案 2 :(得分:3)
如果表单中需要存在大量标签和文本框,我更喜欢Grid
,例如数据输入或属性网格类型的控件。 Grid提供了更多功能来控制行列的width
/ height
,并且在一个位置更改width
/ height
值会影响所有行。
使用Grid
的另一个好处是对齐,所有标签和文本框(或其他控件)都将正确对齐。如果是Stackpanel
或Dockpanel
,则必须明确将wdth设置为每个标签以使其正确对齐。
你也可以在Grid中使用GridSplitter
,这在PropertGrid控件中非常有用。
如果只需要一两个这样的行并且无需考虑对齐,您可以继续使用Dockpanel
或StackPanel
。