2008-11-25 34 views
16

Hiện tại tôi đang chơi với WPF và bây giờ tôi tự hỏi điều gì sẽ là bố cục cho cửa sổ dữ liệu điển hình (hơn 20 hộp văn bản và nội dung).Thực hành tốt nhất của WPF cho cửa sổ DataEntry

atm i`m sử dụng một đối tượng lưới như thế này (mẫu cơ bản)

<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> 

về cơ bản đáp ứng nhu cầu này tất cả các bố trí của tôi, nhưng những gì nếu tôi muốn thay đổi một cái gì đó, giống như thêm một textbox mới trong hàng 3 ?

hiện tại tôi phải thay đổi mọi thuộc tính Grid.Row đơn lẻ sau đó lớn hơn 3, nhưng đó không thể là cách WPF dự định !?

cách người khác bố trí cửa sổ dữ liệu phức tạp?

tia

Trả lời

3

Karl Shifflett cũng có một cách tiếp cận tốt đẹp để LOB hình thức trong WPF: http://karlshifflett.wordpress.com/2008/10/23/wpf-silverlight-lob-form-layout-searching-for-a-better-solution/

+0

wow, đó là nhiều hơn nữa sau đó tôi hy vọng :) tôi sẽ cố gắng mà ra. –

+2

Liên kết này đã chết ... – Matze

+6

vui lòng không bao giờ liên kết trang web chứa câu trả lời, hạn ngạch mọi thứ liên quan đến câu hỏi – mkb

3

Một số người sử dụng lồng nhau StackPanel s để "giải quyết" vấn đề này, nhưng IMHO mà chỉ giới thiệu một vấn đề khác (mã sưng lên). Tôi nghĩ cách tốt nhất để giải quyết vấn đề này là viết bảng điều khiển của riêng bạn để đưa trẻ em liên tiếp vào các cột. Tôi đã làm điều này trên một dự án trước đó và nó có một số ưu điểm:

  • dễ đọc hơn và ngắn gọn XAML
  • dễ dàng hơn để duy trì XAML
  • nhanh hơn hiệu suất

Việc sử dụng nhìn một cái gì đó như thế này :

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

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

    <Label>Field 3:</Label> 
    <TextBox/> 
</local:FieldPanel> 
Các vấn đề liên quan