它用于System.ComponentModel.TypeDescriptor通过 确定类型具有的属性TypeDescriptor.GetProperties。APropertyDescriptor提供了关于每个属性的大量信息(例如,PropertyDescriptor.IsReadOnly会告诉您一个属性是只读的)。此外,使用PropertyDescriptor.GetValue和PropertyDescriptor.SetValue,可以获得并写入属性的值。
- 它如何呈现控件以编辑值?
- 它如何决定渲染什么控件?(我猜测属性上的元数据描述)
它使用一个名为 a 的自定义控件PropertyGrid,它公开了一个ObservableCollectionof Items。Item只是核心模型对象的基类,即Property. Property公开属性的底层类型 ( PropertyDescritor.PropertyType) 并通过 公开PropertyDescriptor.GetValue和PropertyDescriptor.SetValue方法Property.Value。反过来,这必然会启用编辑。DataTemplates是这里的关键。一些 CLR 类型具有DataTemplate呈现您看到的控件的 custom 。例如,Boolean类型被呈现为CheckBoxwhileEnum被呈现为 a ComboBox。默认DataTemplate值为TextBox.
- 发挥所有魔力的 XAML 或 CodeBehind 代码在哪里?
它的倾向在Themes\Default.xaml.
代码可以这样概括。有 data ( Data\Property) 封装了有关对象属性的信息,并提供了 property ( Property.Value) 来读取和写入属性的值。此数据显示为ObservableCollection自定义控件 ( ) 中的一个,该控件使用s inPropertyGrid呈现。DataTemplateThemes\Default.xaml
Default.xaml 文件中有很多 XAML 代码,但据我所知,它只是在那里定义的样式和外观。
不要小看DataTemplates。