Лучшие практики WPF для окна DataEntry

В настоящее время я играю с 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 !?

как другие размещают сложные окна ввода данных?

тиа

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
16
0
17 562
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Некоторые люди используют вложенные StackPanel для «решения» этой проблемы, но ИМХО, это просто вводит другую проблему (раздувание кода). Я думаю, что лучший способ решить эту проблему - написать свою собственную панель, которая последовательно размещает дочерние элементы в столбцах. Я сделал это в предыдущем проекте, и у него есть ряд преимуществ:

  • Более читаемый и лаконичный XAML
  • Легче поддерживать XAML
  • Быстрее производительность

Использование выглядело примерно так:

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

вау, это намного больше, чем я надеялся :) Я попробую.

marc.d 25.11.2008 15:49

пожалуйста, никогда не связывайте просто сайт, содержащий ответ, квотируйте все, что связано с вопросом

mkb 02.05.2016 14:25

karlshifflett.wordpress.com больше не доступен. Авторы удалили этот сайт.

Tony 08.05.2016 18:46

Как всегда, есть путь назад: web.archive.org/web/20150620104259/https://…

Jamey 06.06.2016 19:45

Лично я большой поклонник AutoGrid: http://www.codeplex.com/wpfcontrib/Wiki/View.aspx?title=AutoGrid&referringTitle=Home

Вот еще один макет формы http://www.slideshare.net/ackava/ui-atoms-form-layout

Другие вопросы по теме