簡體   English   中英

PropertyGrid控件中的WPF“魔術”

[英]WPF “Magic” in a PropertyGrid Control

我開始了一個業余項目,以了解WPF,並在研究中偶然發現了WPF PropertyGrid http://www.codeplex.com/wpg

我從http://wpg.codeplex.com/SourceControl/ListDownloadableCommits.aspx下載了源代碼,並開始瀏覽它,看上去很酷,並且可以正常工作。 但是對於我的一生,我不知道它是如何工作的。 以下問題是我乍看之下剩下的。

  • 它如何知道對象具有哪些屬性?
  • 如何呈現控件以編輯值?
  • 它如何決定要呈現的控件? (我猜屬性的元數據描述)

我了解DependancyProperties處理新值之間的數據交換。

  • 神奇的XAML或CodeBehind代碼在哪里?

Default.xaml文件中有很多XAML代碼,但據我所知,只有樣式和在其中定義的外觀。

  • 它如何知道對象具有哪些屬性?

它使用System.ComponentModel.TypeDescriptor通過TypeDescriptor.GetProperties確定類型具有的屬性。 PropertyDescriptor提供有關每個屬性的大量信息(例如, PropertyDescriptor.IsReadOnly將告訴您屬性是只讀的)。 此外,使用PropertyDescriptor.GetValuePropertyDescriptor.SetValue ,可以獲得屬性值並將其寫入。

  • 如何呈現控件以編輯值?
  • 它如何決定要呈現的控件? (我猜屬性的元數據描述)

它使用稱為PropertyGrid的自定義控件,該控件公開ItemObservableCollection Item只是核心模型對象的基類,它是Property Property公開Property的基礎類型( PropertyDescritor.PropertyType ),並通過Property.Value公開PropertyDescriptor.GetValuePropertyDescriptor.SetValue方法。 反過來,這就是啟用編輯的前提。 DataTemplate是這里的關鍵。 一些CLR類型具有自定義DataTemplate ,它們呈現您所看到的控件。 例如, Boolean類型呈現為CheckBoxEnum類型呈現為ComboBox 默認的DataTemplateTextBox

  • 神奇的XAML或CodeBehind代碼在哪里?

它的傾向在Themes\\Default.xaml

這樣可以總結代碼。 有數據( Data\\Property )封裝有關對象屬性的信息,並提供屬性( Property.Value )來讀取和寫入屬性的值。 此數據作為ObservableCollection公開在自定義控件( PropertyGrid )中,該控件使用Themes\\Default.xaml DataTemplate呈現。

Default.xaml文件中有很多XAML代碼,但據我所知,只有樣式和在其中定義的外觀。

不要忽略DataTemplate

  • 它如何知道對象具有哪些屬性?

如果其工作方式與Windows Forms屬性網格相同,則執行以下操作:

  • 如果對象實現ICustomTypeDescriptor,則從此接口獲取屬性(使用GetProperties方法)
  • 否則,對對象的類型(obj.GetType()。GetProperties()

對於其他問題...好吧,我沒有看代碼,所以我無法回答;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM