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

zpqajqem  于 2023-02-25  发布在  其他
关注(0)|答案(4)|浏览(271)

我经常会用到这个:

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

但它是如此常见的场景,我觉得有一种方法可以减少标记。
另外,使用这么多堆栈面板是否会影响性能?

mwg9r5ms

mwg9r5ms1#

我不知道为什么,但是我已经变得非常喜欢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

9udxz4iz

9udxz4iz2#

如果表单中需要大量的标签和文本框,比如数据输入或属性网格类控件,我更喜欢Grid。网格提供了更多的能力来控制width/height的行列,并且在一个地方更改width/height的值将影响所有行。
使用Grid的另一个好处是对齐,所有标签和文本框(或其他控件)都将正确对齐。对于StackpanelDockpanel,您必须显式设置每个标签的宽度以正确对齐它们。
您还可以在Grid中使用GridSplitter,这在PropertyGrid类型的控件中非常有用。
如果只需要一行或两行,并且对齐不是问题,则可以使用DockpanelStackPanel

6ovsh4lw

6ovsh4lw3#

有两种主要的方法可以做到这一点,StackPanelsGrid DefinitionsGrid提供的标记并不比StackPanel少。我个人更喜欢使用Grid Definitions。它们需要一段时间来适应,而且我仍然不时地使用StackPanel。但总的来说,当你习惯它们的时候,它们会感觉干净多了。关于如何使用它们的Here is a great tutorial
WPF Grid Vs. StackPanel是一个可能也有帮助的参考。

ncgqoxb0

ncgqoxb04#

有时候UniformGrid可以用相对较少的代码创造奇迹,我最近重新发现了它,它通常在有很多文本框和标签的简单场景中工作得很好。

<UniformGrid Columns="2" Rows="6"  >
                        <TextBlock>Name</TextBlock>
                        <TextBox Text="Location 1" />
                        <TextBlock>Latitude (°)</TextBlock>
                        <TextBox Text="20.4" />
                        <TextBlock>Longitude (°)</TextBlock>
                        <TextBox Text="10.5" />
                        <TextBlock>X error (°)</TextBlock>
                        <TextBox Text="0.5" />
                        <TextBlock>Y error (°)</TextBlock>
                        <TextBox Text="1.2" />
                        <TextBlock>Angle (°)</TextBlock>
                        <TextBox Text="10.4" />
   </UniformGrid>

相关问题