#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. Я думаю, у вас не может быть кода в комментариях, потому что у меня не было проблем с размещением кода в основном вопросе / ответе 🙂