[英]WPF “Magic” in a PropertyGrid Control
我開始了一個業余項目,以了解WPF,並在研究中偶然發現了WPF PropertyGrid http://www.codeplex.com/wpg
我從http://wpg.codeplex.com/SourceControl/ListDownloadableCommits.aspx下載了源代碼,並開始瀏覽它,看上去很酷,並且可以正常工作。 但是對於我的一生,我不知道它是如何工作的。 以下問題是我乍看之下剩下的。
我了解DependancyProperties處理新值之間的數據交換。
Default.xaml文件中有很多XAML代碼,但據我所知,只有樣式和在其中定義的外觀。
- 它如何知道對象具有哪些屬性?
它使用System.ComponentModel.TypeDescriptor
通過TypeDescriptor.GetProperties
確定類型具有的屬性。 PropertyDescriptor
提供有關每個屬性的大量信息(例如, PropertyDescriptor.IsReadOnly
將告訴您屬性是只讀的)。 此外,使用PropertyDescriptor.GetValue
和PropertyDescriptor.SetValue
,可以獲得屬性值並將其寫入。
- 如何呈現控件以編輯值?
- 它如何決定要呈現的控件? (我猜屬性的元數據描述)
它使用稱為PropertyGrid
的自定義控件,該控件公開Item
的ObservableCollection
。 Item
只是核心模型對象的基類,它是Property
。 Property
公開Property
的基礎類型( PropertyDescritor.PropertyType
),並通過Property.Value
公開PropertyDescriptor.GetValue
和PropertyDescriptor.SetValue
方法。 反過來,這就是啟用編輯的前提。 DataTemplate
是這里的關鍵。 一些CLR類型具有自定義DataTemplate
,它們呈現您所看到的控件。 例如, Boolean
類型呈現為CheckBox
而Enum
類型呈現為ComboBox
。 默認的DataTemplate
是TextBox
。
- 神奇的XAML或CodeBehind代碼在哪里?
它的傾向在Themes\\Default.xaml
。
這樣可以總結代碼。 有數據( Data\\Property
)封裝有關對象屬性的信息,並提供屬性( Property.Value
)來讀取和寫入屬性的值。 此數據作為ObservableCollection
公開在自定義控件( PropertyGrid
)中,該控件使用Themes\\Default.xaml
DataTemplate
呈現。
Default.xaml文件中有很多XAML代碼,但據我所知,只有樣式和在其中定義的外觀。
不要忽略DataTemplate
。
- 它如何知道對象具有哪些屬性?
如果其工作方式與Windows Forms屬性網格相同,則執行以下操作:
對於其他問題...好吧,我沒有看代碼,所以我無法回答;)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.