我开始爱好项目,以了解WPF和在我reasearch我stumpled在这WPF PropertyGrid http://www.codeplex.com/wpg

我下载源 http://wpg.codeplex.com/SourceControl/ListDownloadableCommits.aspx ,并开始通过它浏览,看起来很酷,工作。但对于我的生活,我不能找出它是如何工作的。以下的问题是什么我留在第一目了然。

  • 它怎么知道是什么性质的对象?
  • 它怎么渲染的控制,以编辑一个价值?
  • 它是如何决定什么样的控制呈现?(我猜元数据说明性质)

我了解DependancyProperties处理dataexchange之间的新的价值观。

  • 哪里是XAML或代码代码隐藏,所有的魔法?

有很多停码的默认。xaml文件,但我可以告诉它仅仅是风格,并看起来是定义的存在。

有帮助吗?

解决方案

  • 它怎么知道是什么性质的对象?

它使用 System.ComponentModel.TypeDescriptor 的确定性这一类型有通过 TypeDescriptor.GetProperties.一个 PropertyDescriptor 提供了丰富的信息有关的每个酒店(例如, PropertyDescriptor.IsReadOnly 会告诉你一个酒店是只读的).另外,使用 PropertyDescriptor.GetValuePropertyDescriptor.SetValue, 值的特性可以得到和写到。

  • 它怎么渲染的控制,以编辑一个价值?
  • 它是如何决定什么样的控制呈现?(我猜元数据说明性质)

它使用一个自定义控制称为 PropertyGrid 这暴露了一个 ObservableCollectionItems. Item 仅仅是一个基类为核心的模型对象 Property. Property 公开的基础类型(PropertyDescritor.PropertyType)的财产和公开的 PropertyDescriptor.GetValuePropertyDescriptor.SetValue 方法通过 Property.Value.这样,反过来,是什么势必使的编辑。 DataTemplates 是这里的关键。几CLR类型有定义 DataTemplates呈现的控制着你看到的。例如, Boolean 类型是呈现为 CheckBox 虽然一个 Enum 是呈现为 ComboBox.默认的 DataTemplate 是一个 TextBox.

  • 哪里是XAML或代码代码隐藏,所有的魔法?

所倾向的是在 Themes\Default.xaml.

代码可以被总结为这样。有数据(Data\Property)封装了有关属性的信息的对象,并提供了一个酒店(Property.Value)阅读和书写的价值的财产。这个数据是作为一个 ObservableCollection 在一定的控制(PropertyGrid)是呈现的使用 DataTemplates在 Themes\Default.xaml.

有很多停码的默认。xaml文件,但我可以告诉它仅仅是风格,并看起来是定义的存在。

不要忽视 DataTemplates.

其他提示

  • 它怎么知道是什么性质的对象?

如果工作相同的方式作为Windows形式财产的网格,这并如下:

  • 如果对象实现ICustomTypeDescriptor,获得的性质,从这个界面(与GetProperties方法)
  • 否则,使用反思的对象的类型(obj。GetType().GetProperties()

对于其他问题...嗯,我还没有看码的,所以我不能答案;)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top