В настоящее время я играю с WPF, и теперь мне интересно, какой будет макет для типичного окна ввода данных (20+ текстовых полей и прочее).
atm я использую объект сетки, подобный этому (базовый пример)
<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>
в основном это удовлетворяет все мои потребности в макете, но что, если я захочу что-то изменить, например добавить новое текстовое поле в строке 3?
в настоящее время мне нужно изменить каждое свойство Grid.Row больше 3, но это не может быть предполагаемый способ WPF !?
как другие размещают сложные окна ввода данных?
тиа





Некоторые люди используют вложенные StackPanel для «решения» этой проблемы, но ИМХО, это просто вводит другую проблему (раздувание кода). Я думаю, что лучший способ решить эту проблему - написать свою собственную панель, которая последовательно размещает дочерние элементы в столбцах. Я сделал это в предыдущем проекте, и у него есть ряд преимуществ:
Использование выглядело примерно так:
<local:FieldPanel>
<Label>Field 1:</Label>
<TextBox/>
<Label>Field 2:</Label>
<TextBox/>
<Label>Field 3:</Label>
<TextBox/>
</local:FieldPanel>
У Карла Шиффлетта также есть хороший подход к LOB-формам в WPF: http://karlshifflett.wordpress.com/2008/10/23/wpf-silverlight-lob-form-layout-searching-for-a-better-solution/
пожалуйста, никогда не связывайте просто сайт, содержащий ответ, квотируйте все, что связано с вопросом
karlshifflett.wordpress.com больше не доступен. Авторы удалили этот сайт.
Как всегда, есть путь назад: web.archive.org/web/20150620104259/https://…
Лично я большой поклонник AutoGrid: http://www.codeplex.com/wpfcontrib/Wiki/View.aspx?title=AutoGrid&referringTitle=Home
Вот еще один макет формы http://www.slideshare.net/ackava/ui-atoms-form-layout
вау, это намного больше, чем я надеялся :) Я попробую.