【问题标题】:WPF "Magic" in a PropertyGrid ControlPropertyGrid 控件中的 WPF“魔术”
【发布时间】:2009-08-02 12:43:54
【问题描述】:

我开始了一个爱好项目来了解 WPF,在我的研究中我偶然发现了这个 WPF PropertyGrid http://www.codeplex.com/wpg

我从http://wpg.codeplex.com/SourceControl/ListDownloadableCommits.aspx下载了源码 , 并开始浏览它,看起来很酷,而且工作正常。但是对于我的生活,我无法弄清楚它是如何工作的。以下问题是我第一眼看到的问题。

  • 它如何知道对象具有哪些属性?
  • 如何渲染控件来编辑一个Value?
  • 它如何决定要呈现什么控件? (我猜是关于属性的元数据描述)

我了解 DependancyProperties 处理新值之间的数据交换。

  • 发挥所有魔力的 XAML 或 CodeBehind 代码在哪里?

Default.xaml 文件中有很多 XAML 代码,但据我所知,它只是在那里定义的样式和外观。

【问题讨论】:

    标签: wpf propertygrid


    【解决方案1】:
    • 它如何知道对象具有哪些属性?

    它使用System.ComponentModel.TypeDescriptor 来确定一个类型通过TypeDescriptor.GetProperties 具有的属性。 PropertyDescriptor 提供有关每个属性的大量信息(例如,PropertyDescriptor.IsReadOnly 会告诉您属性是只读的)。此外,使用PropertyDescriptor.GetValuePropertyDescriptor.SetValue,可以获得并写入属性的值。

    • 如何渲染控件来编辑一个Value?
    • 它如何决定呈现什么控件? (我猜是关于属性的元数据描述)

    它使用一个名为PropertyGrid 的自定义控件,它公开了Items 的ObservableCollectionItem 只是核心模型对象Property 的基类。 Property 公开属性的底层类型 (PropertyDescritor.PropertyType) 并通过 Property.Value 公开 PropertyDescriptor.GetValuePropertyDescriptor.SetValue 方法。反过来,这必然会启用编辑。 DataTemplates 是这里的关键。一些 CLR 类型具有自定义 DataTemplates 来呈现您看到的控件。例如,Boolean 类型呈现为CheckBox,而Enum 呈现为ComboBox。默认DataTemplateTextBox

    • 发挥所有魔力的 XAML 或 CodeBehind 代码在哪里?

    它的倾向在Themes\Default.xaml

    代码可以这样概括。有数据 (Data\Property) 封装了有关对象属性的信息,并提供了一个属性 (Property.Value) 来读取和写入属性的值。此数据在自定义控件 (PropertyGrid) 中显示为 ObservableCollection,该控件使用 Themes\Default.xaml 中的 DataTemplates 呈现。

    Default.xaml 文件中有很多 XAML 代码,但据我所知,它只是在那里定义的样式和外观。

    不要忽视DataTemplates。

    【讨论】:

      【解决方案2】:
      • 它如何知道对象具有哪些属性?

      如果它的工作方式与 Windows 窗体属性网格相同,它会执行以下操作:

      • 如果对象实现了 ICustomTypeDescriptor,则从此接口获取属性(使用 GetProperties 方法)
      • 否则,对对象的类型使用反射 (obj.GetType().GetProperties()

      对于其他问题...好吧,我没有看代码,所以我无法回答;)

      【讨论】:

        猜你喜欢
        • 2010-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-29
        • 2015-05-27
        • 2015-07-09
        相关资源
        最近更新 更多