WPF Best Practice für Dateneingabefenster
Frage
i`m zur Zeit des Spiel mit WPF und jetzt frage ich mich, was das Layout für ein typisches Dataentry-Fenster wäre (20+ Textfelder und Sachen).
atm i`m ein Gitter Objekt wie folgt (Grund Probe)
Verwendung <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>
im Grunde erfüllt diese alle meine Layout Bedürfnisse, aber was ist, wenn ich etwas ändern möchten, wie das Hinzufügen einer neuen Textfeld in Zeile 3?
zur Zeit muss ich dann 3 jede einzelne Grid.Row Eigenschaft größer ändern, aber das kann nicht der beabsichtigte WPF Weg sein !?
Wie andere Layouts komplexe Dataentry Fenster?
tia
Lösung
Karl Shifflett hat auch einen schönen Ansatz Formen in WPF LOB: http://karlshifflett.wordpress.com/2008/10/23/wpf-silverlight-lob-form-layout-searching-for-a-better-solution /
Andere Tipps
Ich persönlich bin ein großer Fan von Autogrid: http : //www.codeplex.com/wpfcontrib/Wiki/View.aspx title = Autogrid & referringTitle = Startseite
verwenden Einige Leute verschachtelten StackPanel
s zu „lösen“ dieses Problem, aber IMHO, dass führt gerade ein anderes Problem (Code aufblasen). Ich denke, der beste Weg, dies zu lösen, ist Ihre eigene Platte zu schreiben, die Kinder nacheinander in Spalten legt. Ich habe dies auf einem früheren Projekt, und es hat eine Reihe von Vorteilen:
- Mehr lesbar und prägnante XAML
- leichter pflegen XAML
- Schnellere Leistung
Die Verwendung sah etwa so aus:
<local:FieldPanel>
<Label>Field 1:</Label>
<TextBox/>
<Label>Field 2:</Label>
<TextBox/>
<Label>Field 3:</Label>
<TextBox/>
</local:FieldPanel>
Hier ist eine weitere Form Layout http://www.slideshare.net / ackava / ui-Atome-form-Layout