在WPF中并排制作标签和文本框的预期方法是什么?

时间:2010-07-19 21:14:19

标签: .net wpf xaml

我会经常使用这个:

<StackPanel>
  <StackPanel Orientation="Horizontal">
    <Label>Username:</Label>
    <TextBox />
  </StackPanel>
  <StackPanel Orientation="Horizontal">
    <Label>Password:</Label>
    <PasswordBox />
  </StackPanel>
</StackPanel>

但这是一种常见的情况,我觉得有一种方法可以减少加价。

此外,使用如此多的堆栈面板会对性能产生影响吗?

谢谢!

3 个答案:

答案 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来轻松关闭它)

希望有所帮助!!

DockPanel documentation

答案 1 :(得分:3)

有两种主要方法, StackPanels 网格定义Grid提供的标记不比StackPanel少。我个人更喜欢使用网格定义。他们需要一段时间才能使用,并且我时不时地使用StackPanel,但总体而言,当他们习惯使用时,他们会感觉更清洁。关于如何使用它们的Here is a great tutorial

可能也有帮助的参考是WPF Grid Vs. StackPanel

答案 2 :(得分:3)

如果表单中需要存在大量标签和文本框,我更喜欢Grid,例如数据输入或属性网格类型的控件。 Grid提供了更多功能来控制行列的width / height,并且在一个位置更改width / height值会影响所有行。

使用Grid的另一个好处是对齐,所有标签和文本框(或其他控件)都将正确对齐。如果是StackpanelDockpanel,则必须明确将wdth设置为每个标签以使其正确对齐。

你也可以在Grid中使用GridSplitter,这在PropertGrid控件中非常有用。

如果只需要一两个这样的行并且无需考虑对齐,您可以继续使用DockpanelStackPanel