我正在尝试制作一个全屏(不包括任务栏)并包含大量文本框的 WPF 窗口。
我之前在 winforms 中做过这个。但是在 winforms 中,很容易制作并将所有元素放在一个组框中以使其看起来更好,但是如何在 WPF 中执行此操作,因为在 WPF 中组框可以包含单个项目。
我想做这样的事情:
最佳答案
如果列表是固定长度的,则将文本框放在另一个容器中,例如 Grid、StackPanel 或 WrapPanel:
<GroupBox Header="Student Details">>
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
... as many RowDefinitions as you need
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
... as many ColumnDefinitions as you need
</Grid.ColumnDefinitions>
<GroupBox Grid.Column="0" Grid.Row="0">
<StackPanel Orientation="Horizontal">
<TextBlock .../>
<TextBox .../>
<TextBox .../>
</StackPanel>
</GroupBox>
<GroupBox Grid.Column="0" Grid.Row="1">
<StackPanel Orientation="Horizontal">
<TextBlock .../>
<TextBox .../>
<TextBox .../>
</StackPanel>
</GroupBox>
...
</Grid>
</GroupBox>
因此,虽然 GroupBox 只能包含一个子项,但没有什么可以阻止该子项成为另一种容器类型对象,它可以包含您需要的所有元素。
我在这里使用网格纯粹是为了说明目的。您最终使用的容器将取决于您需要如何布置文本框和标签。网格使您可以更好地控制元素的布局,但更容易在堆栈面板中添加和删除元素 - 您不必添加新的行或列定义。
但是,如果您的列表是可变长度的,那么您最好为列表项创建一个 DataTemplate:
<DataTemplate x:Key="ListTemplate">
<GroupBox>
<StackPanel Orientation="Horizontal">
<TextBlock .../>
<TextBox .../>
<TextBox .../>
</StackPanel>
</GroupBox>
</DataTemplate>
然后使用绑定(bind)来显示列表中的元素:
<GroupBox Header=Student Details">
<ListBox ItemsSource={Binding StudentList}">
<ListBox.ItemTemplate>
....
</ListBox.ItemTemplate/>
</ListBox>
</GroupBox>
关于c# - 在 wpf 窗口中添加大量文本框的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41078029/