我经常会用到这个:
<StackPanel>
<StackPanel Orientation="Horizontal">
<Label>Username:</Label>
<TextBox />
</StackPanel>
<StackPanel Orientation="Horizontal">
<Label>Password:</Label>
<PasswordBox />
</StackPanel>
</StackPanel>
但它是如此常见的场景,我觉得有一种方法可以减少标记。
另外,使用这么多堆栈面板是否会影响性能?
4条答案
按热度按时间mwg9r5ms1#
我不知道为什么,但是我已经变得非常喜欢
DockPanel
,并且我在您描述的场景中使用它们。手写(和等效版本,因为默认停靠位置是左侧):
另外,它有一个属性
LastChildFill
,默认为true
,使最后一个添加到它的子元素填充剩余的空间(我喜欢这个特性).所以,在上面的例子中,TextBox
将填充剩余的可用水平空间.(你可以很容易地关闭它,将它切换为false)希望能有所帮助!!
DockPanel
documentation9udxz4iz2#
如果表单中需要大量的标签和文本框,比如数据输入或属性网格类控件,我更喜欢
Grid
。网格提供了更多的能力来控制width
/height
的行列,并且在一个地方更改width
/height
的值将影响所有行。使用
Grid
的另一个好处是对齐,所有标签和文本框(或其他控件)都将正确对齐。对于Stackpanel
或Dockpanel
,您必须显式设置每个标签的宽度以正确对齐它们。您还可以在Grid中使用
GridSplitter
,这在PropertyGrid类型的控件中非常有用。如果只需要一行或两行,并且对齐不是问题,则可以使用
Dockpanel
或StackPanel
。6ovsh4lw3#
有两种主要的方法可以做到这一点,StackPanels和Grid Definitions,
Grid
提供的标记并不比StackPanel
少。我个人更喜欢使用Grid Definitions。它们需要一段时间来适应,而且我仍然不时地使用StackPanel
。但总的来说,当你习惯它们的时候,它们会感觉干净多了。关于如何使用它们的Here is a great tutorial。WPF Grid Vs. StackPanel是一个可能也有帮助的参考。
ncgqoxb04#
有时候
UniformGrid
可以用相对较少的代码创造奇迹,我最近重新发现了它,它通常在有很多文本框和标签的简单场景中工作得很好。