質問
私は現在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の方法ではありません!?
他の人は複雑なデータ入力ウィンドウをどのようにレイアウトしますか?
tia
解決
Karl Shifflettには、WPFのLOBフォームへの優れたアプローチもあります。 http://karlshifflett.wordpress.com/2008/10/23/wpf-silverlight-lob-form-layout-searching-for-a-better-solution /
他のヒント
個人的に、私はAutoGridの大ファンです: http ://www.codeplex.com/wpfcontrib/Wiki/View.aspx?title = AutoGrid&amp; referringTitle = Home
一部の人々は、ネストされた StackPanel
sを使用して「解決」します。この問題ですが、別の問題(コードの肥大化)が発生するだけです。これを解決する最善の方法は、列に子供を連続して配置する独自のパネルを書くことだと思います。これは以前のプロジェクトで行ったもので、多くの利点があります:
- 読みやすく簡潔なXAML
- XAMLのメンテナンスが簡単
- 高速なパフォーマンス
使用方法は次のようになりました:
<local:FieldPanel>
<Label>Field 1:</Label>
<TextBox/>
<Label>Field 2:</Label>
<TextBox/>
<Label>Field 3:</Label>
<TextBox/>
</local:FieldPanel>
もう1つのフォームレイアウト http://www.slideshare.net / ackava / ui-atoms-form-layout