16

我目前正在使用 WPF,现在我想知道典型数据输入窗口(20 多个文本框和其他东西)的布局是什么。

atm 我正在使用这样的网格对象(基本示例)

    <Grid Margin="2,2,2,2">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"></ColumnDefinition>
            <ColumnDefinition Width="*"></ColumnDefinition>
        </Grid.ColumnDefinitions>

        <Grid.RowDefinitions >
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
        </Grid.RowDefinitions>

            <Label Grid.Row="0" Grid.Column="0">Vorname:</Label>
            <TextBox Grid.Row="0" Grid.Column="1" Text="{Binding Path=Surname, UpdateSourceTrigger=PropertyChanged}" ></TextBox>

            <Label Grid.Row="1" Grid.Column="0">Nachname:</Label>
            <TextBox Grid.Row="1" Grid.Column="1" Text="{Binding Path=ChristianName, UpdateSourceTrigger=PropertyChanged}"></TextBox>

            <Label Grid.Row="2" Grid.Column="0">Strasse (Wohnsitz):</Label>
            <TextBox Grid.Row="2" Grid.Column="1" Text="{Binding Path=Street1, UpdateSourceTrigger=PropertyChanged}"></TextBox>

            <Label Grid.Row="3" Grid.Column="0">Ort (Wohnsitz):</Label>
            <TextBox Grid.Row="3" Grid.Column="1" Text="{Binding Path=Town1, UpdateSourceTrigger=PropertyChanged}"></TextBox>

            <Label Grid.Row="4" Grid.Column="0">Postleitzahl (Wohnsitz):</Label>
            <TextBox Grid.Row="4" Grid.Column="1" Text="{Binding Path=PostalCode1, UpdateSourceTrigger=PropertyChanged}"></TextBox>

            <Label Grid.Row="5" Grid.Column="0">Bundesland (Wohnsitz):</Label>
            <TextBox Grid.Row="5" Grid.Column="1" Text="{Binding Path=State1, UpdateSourceTrigger=PropertyChanged}"></TextBox>

            <Label Grid.Row="6" Grid.Column="0">Land (Wohnsitz):</Label>
            <TextBox Grid.Row="6" Grid.Column="1" Text="{Binding Path=Country1, UpdateSourceTrigger=PropertyChanged}"></TextBox>

            <Label Grid.Row="7" Grid.Column="0">Zusatz (Wohnsitz):</Label>
            <TextBox Grid.Row="7" Grid.Column="1" Text="{Binding Path=AdditionalAdrInfo1, UpdateSourceTrigger=PropertyChanged}"></TextBox>

    </Grid>

基本上这满足了我所有的布局需求,但是如果我想改变一些东西,比如在第 3 行添加一个新的文本框呢?

目前我必须更改大于 3 的每个 Grid.Row 属性,但这不能是预期的 WPF 方式!?

其他人如何布局复杂的数据输入窗口?

蒂亚

4

4 回答 4

5

就个人而言,我是 AutoGrid 的忠实粉丝:http: //www.codeplex.com/wpfcontrib/Wiki/View.aspx? title=AutoGrid&referringTitle=Home

于 2008-11-25T17:39:42.347 回答
3

有些人使用嵌套StackPanels 来“解决”这个问题,但恕我直言,这只是引入了另一个问题(代码膨胀)。我认为解决这个问题的最好方法是编写自己的面板,在列中连续布置孩子。我在以前的项目中这样做过,它有很多优点:

  • 更具可读性和简洁的 XAML
  • 更容易维护 XAML
  • 更快的性能

用法看起来像这样:

<local:FieldPanel>
    <Label>Field 1:</Label>
    <TextBox/>

    <Label>Field 2:</Label>
    <TextBox/>

    <Label>Field 3:</Label>
    <TextBox/>
</local:FieldPanel>
于 2008-11-25T10:32:09.823 回答
2

Karl Shifflett 对 WPF 中的 LOB 表单也有一个很好的方法:http: //karlshifflett.wordpress.com/2008/10/23/wpf-silverlight-lob-form-layout-searching-for-a-better-solution/

于 2008-11-25T12:17:54.277 回答
1

这是另一种表单布局http://www.slideshare.net/ackava/ui-atoms-form-layout

于 2010-04-16T17:04:09.467 回答