我需要创建一个桌面CAD应用程序,它本质上应该有一个漂亮的现代GUI。 我正在考虑创建一个WPF应用程序,以便我可以拥有一个丰富的用户界面。 有人会建议我在WPF中设计精良的桌面应用程序GUI框架吗? 我在这个视频中发现了一些很酷的GUI http://channel9.msdn.com/posts/Psychlist1972/Pete-at-PDC09-WPF-3d-Awesomeness-with-Tor-and-Robby/ 但不确定他们在申请中使用的控件。 有没有人知道他们在那里使用了哪些控件?
WPF中是否有任何属性网格控件?我试图在Windows窗体中使用网格。根据我的要求定制此网格似乎很困难。它直接从最基类到最派生的对象显示了对象的所有属性。
答案 0 :(得分:9)
使用WPF,可以实现很多目标。你可以找到各种应用程序的各种外观,因为与Windows Forms不同,WPF可以像HTML一样进行模板化和样式化。实际的设计人员可以轻松地带来在Windows窗体中很难实现的外观和感觉。当然,由于它非常灵活,高风格应用程序的外观在应用程序之间会有很大差异。
也就是说,有一些非常好的第三方控件。所有常见的嫌疑人都有WPF的控制库:Telerik,Infragistics,ComponentOne,Actipro,Devxpress仅举几例。具体来说,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>
我会让你填写剩下的细节。