c# - 在 wpf 窗口中添加大量文本框的最佳方法是什么

标签 c# wpf

我正在尝试制作一个全屏(不包括任务栏)并包含大量文本框的 WPF 窗口。

我之前在 winforms 中做过这个。但是在 winforms 中,很容易制作并将所有元素放在一个组框中以使其看起来更好,但是如何在 WPF 中执行此操作,因为在 WPF 中组框可以包含单个项目。

我想做这样的事情:

enter image description here

最佳答案

如果列表是固定长度的,则将文本框放在另一个容器中,例如 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/

相关文章:

c# - 特殊(或外国)字符

c# - WCF 双工服务使用 net tcp : "Stream Security is required..."

c# - Entity Framework 代码优先 - 使用 MySql 创建数据库?

c# - 使用YouTube API时,无法在VS2015 RC Universal上加载文件或程序集 'system.net, version=2.0.5.0'

c# - Silverlight 中的三态按钮

.net - 数据触发器未触发

c# - 更新到新的 csproj 格式后无法打开 Windows 窗体设计器

c# - 使用 Thread.Sleep,同时使用程序

WPF Infragistics xamDataGrid - CollectionView GroupDescriptions 无法像 WPF DataGrid 那样被识别

c# - 基本的 gongsolution sample 没有掉落