6

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

WPF中是否有任何属性网格控件?我尝试在 Windows 窗体中使用网格。定制这个网格以满足我的要求似乎很困难。它直接显示了对象的所有属性,从非常基类到最派生类。

4

2 回答 2

10

使用 WPF,有很多可能。由于与 Windows 窗体不同,WPF 可以像 HTML 一样进行模板化和样式化,因此您会发现各种应用程序的外观多种多样。实际的设计师可以轻松地带来在 Windows 窗体中很难实现的外观和感觉。自然,由于它非常灵活,因此高度风格化的应用程序的外观会因应用程序而异。

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

最后,直到您了解如何将由 WPF 绘制和管理的视图与视图的逻辑抽象(称为视图模型)分离后,才能完全实现 WPF 的优势。Josh Smith 有一篇关于这种模式的精彩文章,称为 Model-View-ViewModel,位于:http: //msdn.microsoft.com/en-us/magazine/dd419663.aspx

于 2010-01-25T19:59:34.987 回答
5

我认为 Microsoft 认为在 WPF 中包含 PropertyGrid 控件没有任何意义,因为创建自己的控件非常简单,而且如果他们创建了控件,则更难设置样式。

要创建您自己的 PropertyGrid,只需将 a与<ListBox>带有停靠在左侧的 a 作为属性名称和 a作为值编辑器一起使用,然后在属性上启用分组。<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>

我会让你填写其余的细节。

于 2010-01-25T22:53:34.650 回答