在WPF中创建一个漂亮的GUI

Ram*_*Ram 6 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窗体中使用网格.根据我的要求定制此网格似乎很困难.它直接从最基类到最大派生,显示了对象的所有属性.

cod*_*zen 9

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

也就是说,有一些非常好的第三方控件.所有常见的犯罪嫌疑人对WPF控件库:Telerik的,Infragistics的,ComponentOne的,Actipro,Devxpress只是仅举几例.具体来说,Actipro的Property Grid非常好.还有一个我没有评估的开源,所以不能说.WPF也可以通过将预编译样式应用于控件来"主题化".这里有一些示例主题:http://wpfthemes.codeplex.com/.

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


Ray*_*rns 5

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

要创建自己的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,
  };
Run Code Online (Sandbox Code Playgroud)

CreateEditor方法只是为属性构造一个适当的编辑器,并绑定到实际的属性值.

在XAML中,<ListBox.ItemTemplate>将是这样的:

<DataTemplate>
  <DockPanel>
    <TextBlock Text="{Binding PropertyName}" Width="200" />
    <ContentPresenter DataContext="{Binding Object}" Content="{Binding Editor}" />
  </DockPanel>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

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