【问题标题】:What is the intended way to make a label and text box side by side in WPF?在 WPF 中并排制作标签和文本框的预期方法是什么?
【发布时间】:2010-07-19 21:14:18
【问题描述】:

我会经常用这个:

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

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

另外,使用这么多堆栈面板是否会对性能产生影响?

谢谢!

【问题讨论】:

  • 它是基于 XML 的 - 它应该过于冗长 ;-)
  • 与 Visual Studio 或 Expression Blend 生成的标记相比,您显示的标记微不足道 - 尝试使用设计器定位控件(即拖动它们)。你会明白我的意思,然后可能再也不想使用设计器进行布局了。你所拥有的根本不应该有问题!

标签: .net wpf xaml


【解决方案1】:

我不知道为什么,但我已经非常喜欢DockPanel,并且我将它们用于您描述的场景。

<DockPanel>
    <Label Content="Username:"/>
    <TextBox Text="Some Text"/>
</DockPanel>

速记(和等效版本,因为默认停靠位置是左侧):

<DockPanel>
    <Label DockPanel.Dock="Left" Content="Username:"/>
    <TextBox DockPanel.Dock="Left" Text="Some Text"/>
</DockPanel>

此外,它还有一个属性LastChildFill,默认为true,使得添加到它的最后一个子元素填充剩余空间(我喜欢这个功能)。因此,在上述示例中,TextBox 将填充剩余的可用水平空间。 (您可以通过将其切换为 false 轻松将其关闭)

希望有帮助!!

DockPanel documentation

【讨论】:

    【解决方案2】:

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

    使用Grid 的另一个好处是对齐,所有标签和文本框(或其他控件)都将正确对齐。对于StackpanelDockpanel,您必须明确设置每个标签的宽度以正确对齐它们。

    您还可以在 Grid 中使用 GridSplitter,这在 PropertGrid 类型的控件中非常有用。

    如果只需要一两行这样的行并且对齐不是问题,您可以继续使用DockpanelStackPanel

    【讨论】:

      【解决方案3】:

      有两种主要方法可以做到这一点,StackPanelsGrid DefinitionsGrid 提供的标记并不比StackPanel 少。我个人更喜欢使用 Grid Definitions。它们需要一段时间才能习惯,而且我仍然不时使用StackPanel,但总的来说,当你习惯它们时,它们会感觉更干净。 Here is a great tutorial 了解如何使用它们。

      WPF Grid Vs. StackPanel 也可能有帮助。

      【讨论】:

        猜你喜欢
        • 2011-11-09
        • 1970-01-01
        • 1970-01-01
        • 2012-02-15
        • 2012-10-31
        • 2011-04-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多