2010-01-25 57 views
5

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

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

回答

5

有了WPF,很多都是可以的。由于与Windows窗体不同,WPF可以模板化并与HTML格式非常相似,因此您会发现各种应用程序有各种各样的外观。实际的设计师可以很容易地带来在Windows窗体中很难完成的外观和感觉。当然,由于它非常灵活,从应用程序到应用程序,高度风格的应用程序的外观会有很大差异。

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

最后,WPF的优势没有得到充分实现,直到你学会如何向四周绘制和WPF和观点的逻辑抽象管理视图分离,被称为视图模型。约什史密斯有一篇关于这种模式的伟大文章,称为Model-View-ViewModel,在这里:http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

4

我认为微软没有看到点包括在WPF中PropertyGrid控件,因为它是那么微不足道创建自己的,如果他们创造了控制这将是更难的风格。

要创建自己的PropertyGrid中,只使用一个<ListBox><ItemsTemplate>有含停靠到左侧的属性名称<TextBlock>和值编辑器<ContentPresenter>,然后启用对Category财产集合了<DockPanel>

您需要编写的唯一代码是反映该对象并创建属性列表的代码。

这里是你会用什么一个粗略的想法:

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> 

我会告诉你的细节填写其余。