C# 在wpf窗口中添加大量文本框的最佳方法是什么
我正试图使一个WPF窗口将全屏(不包括任务栏),并将包含大量的文本框 我以前在winforms中做过这个。但是在winforms中,很容易制作并将所有元素放在groupbox中以使其看起来更好,但是如何在WPF中做到这一点,因为在WPF中groupbox可以包含单个项 我想做这样的东西:C# 在wpf窗口中添加大量文本框的最佳方法是什么,c#,wpf,C#,Wpf,我正试图使一个WPF窗口将全屏(不包括任务栏),并将包含大量的文本框 我以前在winforms中做过这个。但是在winforms中,很容易制作并将所有元素放在groupbox中以使其看起来更好,但是如何在WPF中做到这一点,因为在WPF中groupbox可以包含单个项 我想做这样的东西: .... .... .... 如果列表长度固定,则将文本框放在另一个容器中,如网格、StackPanel或WrapPanel: <GroupBox Header="Student Details">
....
....
....
如果列表长度固定,则将文本框放在另一个容器中,如网格、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 x:Key="ListTemplate">
<GroupBox>
<StackPanel Orientation="Horizontal">
<TextBlock .../>
<TextBox .../>
<TextBox .../>
</StackPanel>
</GroupBox>
</DataTemplate>
然后使用绑定在列表中显示元素:
<GroupBox Header=Student Details">
<ListBox ItemsSource={Binding StudentList}">
<ListBox.ItemTemplate>
....
</ListBox.ItemTemplate/>
</ListBox>
</GroupBox>
....
我找到了以下解决方案
我希望它能对您有所帮助。您可以创建一个UserControl,用这个xaml内容表示您的学生数据: StudentControl.xaml
<UserControl x:Class="YourNamespace.StudentControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignWidth="300">
<GroupBox Margin="3">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Label Content="Student 1" x:Name="StudentLabel" FontWeight="Bold"></Label>
<TextBox Grid.Column="1" Text="name" Margin="3"></TextBox>
<TextBox Grid.Column="2" Text="email" Margin="3"></TextBox>
</Grid>
</GroupBox>
</UserControl>
然后在主窗口中,这是您需要的所有标记:
<Grid VerticalAlignment="Top">
<GroupBox Header="Student Details">
<UniformGrid x:Name="StudentGrid" Columns="2" />
</GroupBox>
</Grid>
并且在代码隐藏文件(MainWindow.xaml.cs)中:
public MainWindow()
{
InitializeComponent();
for (var i = 0; i < 20; i++)
StudentGrid.Children.Add(new StudentControl($"Student{i + 1}"));
}
public主窗口()
{
初始化组件();
对于(变量i=0;i<20;i++)
添加(新的StudentControl($“Student{i+1}”);
}
如果您希望拥有网格布局的强大功能,但确实希望为所有用户控件平均分配空间,那么使用UniformGrid非常好
希望这有帮助 我发现了以下内容,希望能对你有所帮助。谢谢。盒子的大小如何。我想把它放在整个窗户里。我应该把它们拖走还是。。默认情况下,如何调整长方体的大小GroupBox拉伸。例如,在GroupBox内部,您可以使用带有列的网格
using System.Windows.Controls;
namespace YourNamespace
{
public partial class StudentControl : UserControl
{
public StudentControl(string labelText)
{
InitializeComponent();
StudentLabel.Content = labelText;
}
}
}
<Grid VerticalAlignment="Top">
<GroupBox Header="Student Details">
<UniformGrid x:Name="StudentGrid" Columns="2" />
</GroupBox>
</Grid>
public MainWindow()
{
InitializeComponent();
for (var i = 0; i < 20; i++)
StudentGrid.Children.Add(new StudentControl($"Student{i + 1}"));
}