Ventana de mejores prácticas de WPF para la entrada de datos
Pregunta
Actualmente estoy jugando con WPF y ahora me pregunto cuál sería el diseño para una ventana de entrada de datos típica (más de 20 cuadros de texto y otras cosas).
atm estoy usando un objeto de cuadrícula como este (muestra básica)
<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>
básicamente esto satisface todas mis necesidades de diseño, pero ¿qué pasa si deseo cambiar algo, como agregar un nuevo cuadro de texto en la fila 3?
¿actualmente tengo que cambiar cada propiedad de Grid.Row por encima de 3, pero esa no puede ser la forma WPF prevista?
¿cómo otros diseñan ventanas de entrada de datos complejas?
tia
Solución
Karl Shifflett también tiene un buen enfoque para los formularios LOB en WPF: http://karlshifflett.wordpress.com/2008/10/23/wpf-silverlight-lob-form-layout-searching-for-a-better-solution /
Otros consejos
Personalmente, soy un gran admirador de AutoGrid: http : //www.codeplex.com/wpfcontrib/Wiki/View.aspx? title = AutoGrid & referTitle = Inicio
Algunas personas usan StackPanel
s anidado para " resolver " este problema, pero en mi humilde opinión que solo introduce otro problema (código hinchado). Creo que la mejor manera de resolver esto es escribir su propio panel que presenta a los niños consecutivamente en columnas. Hice esto en un proyecto anterior y tiene una serie de ventajas:
- XAML más legible y conciso
- Más fácil de mantener XAML
- Rendimiento más rápido
El uso se parecía a esto:
<local:FieldPanel>
<Label>Field 1:</Label>
<TextBox/>
<Label>Field 2:</Label>
<TextBox/>
<Label>Field 3:</Label>
<TextBox/>
</local:FieldPanel>
Aquí hay un diseño de formulario más http://www.slideshare.net / ackava / ui-átomos-forma-diseño