создание приятного графического интерфейса в WPF - PullRequest
6 голосов
/ 25 января 2010

Мне нужно создать настольное приложение САПР, которое по сути должно иметь хороший современный графический интерфейс. Я думаю о создании приложения WPF, чтобы у меня был богатый пользовательский интерфейс. Кто-нибудь может предложить мне хорошо спроектированную среду графического интерфейса для настольных приложений в WPF, пожалуйста? Я нашел какой-то крутой графический интерфейс в этом видео http://channel9.msdn.com/posts/Psychlist1972/Pete-at-PDC09-WPF-3d-Awesomeness-with-Tor-and-Robby/ но не уверен в элементах управления, которые они использовали в своем приложении. У кого-нибудь есть идеи, какие элементы управления они там использовали?

Есть ли какой-либо элемент управления сеткой свойств в WPF? Я пытался использовать сетку в Windows Forms. Настройка этой сетки в соответствии с моими требованиями кажется сложной. Он показывает все свойства объекта от самого базового класса до самого производного.

Ответы [ 2 ]

9 голосов
/ 25 января 2010

С WPF многое возможно. Вы найдете широкий выбор различных приложений, потому что в отличие от Windows Forms, WPF может быть шаблонизирован и стилизован как HTML. Фактические дизайнеры могут легко создать внешний вид, который очень сложно реализовать в Windows Forms. Естественно, поскольку он очень гибкий, внешний вид приложений с высоким стилем будет сильно различаться от приложения к приложению.

Тем не менее, есть несколько очень хороших сторонних контролей. У всех обычных подозреваемых есть управляющие библиотеки для WPF: Telerik , Infragistics , ComponentOne , Actipro , Devxpress просто назвать несколько. В частности, Сетка свойств Actipro очень хороша. Существует также с открытым исходным кодом , который я не оценивал, поэтому не могу говорить. WPF также можно «тематизировать», применяя предварительно скомпилированные стили к элементам управления. Здесь можно найти примеры тем: http://wpfthemes.codeplex.com/.

Наконец, сильные стороны WPF не полностью реализованы, пока вы не научитесь разделять представление, которое рисуется и управляется WPF, и логическую абстракцию представления, называемую моделью представления. У Джоша Смита есть отличная статья об этом шаблоне, известная как Model-View-ViewModel, здесь: http://msdn.microsoft.com/en-us/magazine/dd419663.aspx.

5 голосов
/ 26 января 2010

Я думаю, что Microsoft не видела смысла включать элемент управления PropertyGrid в WPF, потому что создать свой собственный элемент тривиально, и если бы они создали элемент управления, его было бы сложнее стилизовать.

Чтобы создать свою собственную PropertyGrid, просто используйте <ListBox> с <ItemsTemplate>, у которого <DockPanel> содержит <TextBlock>, закрепленный слева для имени свойства и <ContentPresenter> для редактора значений, затем включить группировку для свойства Category.

Единственный код, который вам нужно написать, - это код, который отражает объект и создает список свойств.

Вот примерное представление о том, что вы будете использовать:

DataContext =
  from pi in object.GetType().GetProperties()
  select new PropertyGridRow
  {
    Name = pi.Name,

    Category = (
      from attrib in pi.GetCustomAttributes(false).OfType<CategoryAttribute>()
      select attrib.Category
    ).FirstOrDefault() ?? "None",

    Description = (
      from attrib in pi.GetCustomAttributes(false).OfType<DescriptionAttribute>()
      select attrib.Description
    ).FirstOrDefault(),

    Editor = CreateEditor(pi),

    Object = object,
  };

Метод CreateEditor просто создаст соответствующий редактор для свойства с привязкой к фактическому значению свойства.

В XAML <ListBox.ItemTemplate> будет выглядеть примерно так:

<DataTemplate>
  <DockPanel>
    <TextBlock Text="{Binding PropertyName}" Width="200" />
    <ContentPresenter DataContext="{Binding Object}" Content="{Binding Editor}" />
  </DockPanel>
</DataTemplate>

Я позволю вам заполнить остальные детали.

...