在WPF中创建一个漂亮的GUI

时间:2010-01-25 19:44:56

标签: wpf user-interface look-and-feel

我需要创建一个桌面CAD应用程序,它本质上应该有一个漂亮的现代GUI。 我正在考虑创建一个WPF应用程序,以便我可以拥有一个丰富的用户界面。 有人会建议我在WPF中设计精良的桌面应用程序GUI框架吗? 我在这个视频中发现了一些很酷的GUI http://channel9.msdn.com/posts/Psychlist1972/Pete-at-PDC09-WPF-3d-Awesomeness-with-Tor-and-Robby/ 但不确定他们在申请中使用的控件。 有没有人知道他们在那里使用了哪些控件?

WPF中是否有任何属性网格控件?我试图在Windows窗体中使用网格。根据我的要求定制此网格似乎很困难。它直接从最基类到最派生的对象显示了对象的所有属性。

2 个答案:

答案 0 :(得分:9)

使用WPF,可以实现很多目标。你可以找到各种应用程序的各种外观,因为与Windows Forms不同,WPF可以像HTML一样进行模板化和样式化。实际的设计人员可以轻松地带来在Windows窗体中很难实现的外观和感觉。当然,由于它非常灵活,高风格应用程序的外观在应用程序之间会有很大差异。

也就是说,有一些非常好的第三方控件。所有常见的嫌疑人都有WPF的控制库:TelerikInfragisticsComponentOneActiproDevxpress仅举几例。具体来说,Actipro's Property Grid非常好。我还没有评估open source one,所以不能说话。 WPF也可以通过将预编译样式应用于控件来“主题化”。这里有一些示例主题:http://wpfthemes.codeplex.com/

最后,在您学习如何分离由WPF绘制和管理的视图以及视图的逻辑抽象(称为视图模型)之前,WPF的优势尚未完全实现。 Josh Smith有一篇关于这种模式的精彩文章,名为Model-View-ViewModel,在这里:http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

答案 1 :(得分:5)

我认为微软认为在WPF中包含一个PropertyGrid控件毫无意义,因为创建自己的控件非常简单,如果他们创建了控件,那么它的样式就更难了。

要创建自己的PropertyGrid,只需使用<ListBox> <ItemsTemplate> <DockPanel>,其中<TextBlock>包含一个<ContentPresenter>,左侧为媒体名称和{ {1}}为值编辑器,然后在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>

我会让你填写剩下的细节。

相关问题