2008-11-25 19 views
16

Actualmente estoy jugando con WPF y ahora me pregunto cuál sería el diseño de una ventana de entrada de datos típica (más de 20 cuadros de texto y esas cosas).Práctica recomendada de WPF para DataEntry Window

i`m

atm usando un objeto de la cuadrícula como esto (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 lo que si me gustaría cambiar algo, como la adición de un nuevo cuadro de texto en la fila 3 ?

Actualmente tengo que cambiar cada propiedad Grid.Row superior a 3, pero esa no puede ser la forma prevista de WPF !?

¿cómo otros diseñan ventanas complejas de entrada de datos?

tia

Respuesta

3

Algunas personas utilizan anidados StackPanel s de "resolver" este problema, pero en mi humilde opinión que simplemente introduce otro problema (hinchazón de código). Creo que la mejor manera de resolver esto es escribir su propio panel que coloque 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 parecía algo como esto :

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

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

    <Label>Field 3:</Label> 
    <TextBox/> 
</local:FieldPanel> 
Cuestiones relacionadas