Компоновка и форматирование без динамических элементов управления в WPF

#wpf

#wpf

Вопрос:

Как мне отформатировать и поместить мои элементы управления в макет в WPF? Я имею в виду, я знаю о создании динамических элементов управления и размещении их на сетке, панели или чем-то еще, но есть ли способ лучше? Например, если бы это было веб-приложение, я мог бы просто использовать некоторые HTML и CSS и получить то, что я хочу, но есть ли что-то лучше, чем создание динамических элементов управления в WPF? У меня есть таблица базы данных, полная материалов, которые я хочу отобразить в моем приложении WPF. Могу ли я изменить DataGrid или ListView или что-то еще для этой цели? Я прикрепляю изображения, которые могут облегчить вам, ребята, понимание того, о чем я говорю.

Изображения:

мои данные внутри таблицы базы данных — http://i.stack.imgur.com/LnHCv.png

мои данные, отформатированные с помощью HTML и CSS — http://i.stack.imgur.com/6PHBH.png

Ответ №1:

Типичный способ сделать это в WPF — с помощью шаблонов данных.

В общем, если вы хотите отобразить набор данных, отформатированный согласно вашему второму снимку экрана, вам следует привязать dataset (обычно содержащийся в коллекции, такой как ObservableCollection) к ListBox или аналогичному дочернему элементу ItemsControl, и установить ItemsTemplate значение DataTemplate , которое вы создали для отображения элементов в желаемом формате.

Например, очень грубое приближение вашего HTML-макета:

 <ListBox ItemsSource="{Binding}">
    <ListBox.ItemTemplate>
        <DataTemplate DataType="TypeOfYourDataObject">
            <StackPanel>
                <TextBlock FontSize="12" Foreground="Turquoise" Text="{Binding NickName}"/>
                <StackPanel Orientation="Horizontal">
                    <TextBlock FontSize="11" Foreground="Gray" Text="email / "/>
                    <TextBlock FontSize="11" Foreground="Turquoise" Text="{Binding EmailAddress}"/>
                </StackPanel>
                <StackPanel Orientation="Horizontal">
                    <TextBlock FontSize="11" Foreground="Gray" Text="web / "/>
                    <TextBlock FontSize="11" Foreground="Turquoise" Text="{Binding Url}"/>
                </StackPanel>
                <Separator/>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
  

Комментарии:

1. Я имел в виду динамические элементы управления.. Label Метка = новая метка(); метка. Поле = новая толщина (10); метка. Содержимое = «Некоторое значение»; someContainer. Дочерние элементы. Добавить (надпись);

2. Что ж, вам, безусловно, было бы лучше определить свой элемент управления в XAML, как я продемонстрировал выше. 🙂

3. Огромное спасибо! ps: Я все еще не понял, как размещать код, четыре пробела перед каждой строкой не работают? 😛

4. Хм … 4 пробела перед каждой строкой должны работать… В качестве альтернативы я просто использую кнопку, которая появляется над редактором (та, которая выглядит как фигурные скобки).

5. Я думаю, у вас не может быть кода в комментариях, потому что у меня не было проблем с размещением кода в основном вопросе / ответе 🙂