WPF melhores práticas para a janela de entrada de dados
Pergunta
i`m atualmente brincar com WPF e agora eu me pergunto o que seria o layout para uma janela dataentry típica (20 + caixas de texto e outras coisas).
atm i`m usando um objeto de grade como este (amostra 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>
Basicamente, este satisfaz todas as minhas necessidades de layout, mas o que se eu quiser mudar alguma coisa, como a adição de uma nova caixa de texto na linha 3?
Atualmente eu tenho que mudar a cada Grid.Row propriedade maior do que 3, mas isso não pode ser o caminho WPF destina !?
Como os outros layout de janelas EntradaDeDados complexas?
tia
Solução
Karl Shifflett também tem uma abordagem agradável para formas LOB em WPF: http://karlshifflett.wordpress.com/2008/10/23/wpf-silverlight-lob-form-layout-searching-for-a-better-solution /
Outras dicas
Pessoalmente, eu sou um grande fã de AutoGrid: http :? //www.codeplex.com/wpfcontrib/Wiki/View.aspx title = AutoGrid & referringTitle = Início
Algumas pessoas usam StackPanel
s aninhados para "resolver" este problema, mas IMHO que apenas introduz um outro problema (inchaço de código). Eu acho que a melhor maneira de resolver isso é escrever o seu próprio painel que estabelece crianças consecutivamente em colunas. Eu fiz isso em um projeto anterior e tem uma série de vantagens:
- Mais legível e conciso XAML
- Mais fácil de manter XAML
- Desempenho mais rápido
O uso parecia algo como isto:
<local:FieldPanel>
<Label>Field 1:</Label>
<TextBox/>
<Label>Field 2:</Label>
<TextBox/>
<Label>Field 3:</Label>
<TextBox/>
</local:FieldPanel>
Aqui está mais uma forma de layout http://www.slideshare.net / ackava / ui-átomos-forma-disposição