我开始了一个爱好项目,以了解WPF,在我的研究中,我对这个WPF PropertyGrid http://www.codeplex.com/wpg
进行了讨论。我从http://wpg.codeplex.com/SourceControl/ListDownloadableCommits.aspx下载了来源 ,并开始浏览它,看起来很酷,并且工作。但对于我的生活,我无法弄清楚它是如何运作的。以下是我乍一看的问题。
我理解DependancyProperties处理新值之间的数据交换。
Default.xaml文件中有很多XAML代码,但据我所知,它只是样式和那里定义的外观。
答案 0 :(得分:7)
- 它如何知道对象具有哪些属性?
它使用System.ComponentModel.TypeDescriptor
来确定类型通过TypeDescriptor.GetProperties
的属性。 PropertyDescriptor
提供了有关每个属性的大量信息(例如,PropertyDescriptor.IsReadOnly
会告诉您属性是只读的)。此外,使用PropertyDescriptor.GetValue
和PropertyDescriptor.SetValue
,可以获取和写入属性的值。
- 如何呈现控件以编辑值?
- 如何决定要渲染的控件? (我猜测属性上的元数据描述)
它使用名为PropertyGrid
的自定义控件,该控件公开ObservableCollection
Item
个。 Item
仅仅是核心模型对象的基类,Property
。 Property
公开属性的基础类型(PropertyDescritor.PropertyType
),并通过PropertyDescriptor.GetValue
公开PropertyDescriptor.SetValue
和Property.Value
方法。反过来,这也是启用编辑的必要条件。 DataTemplate
s是关键所在。一些CLR类型具有自定义DataTemplate
,用于呈现您看到的控件。例如,Boolean
类型呈现为CheckBox
,而Enum
呈现为ComboBox
。默认DataTemplate
是TextBox
。
- 执行所有魔术的XAML或CodeBehind代码在哪里?
它的倾向在Themes\Default.xaml
。
代码可以这样概括。有数据(Data\Property
)封装了有关对象属性的信息,并提供了一个属性(Property.Value
)来读取和写入属性的值。此数据在自定义控件(ObservableCollection
)中显示为PropertyGrid
,该控件使用DataTemplate
中的Themes\Default.xaml
呈现。
Default.xaml文件中有很多XAML代码,但据我所知,它只是样式和那里定义的外观。
不要忽略DataTemplate
s。
答案 1 :(得分:4)
- 它如何知道对象具有哪些属性?
如果它的工作方式与Windows窗体属性网格相同,则执行以下操作:
对于其他问题......好吧,我没看过代码,所以我无法回答;)