1

我正在尝试在 Sukram WPF 图表设计器示例(WPF 图表设计器 - 第 4 部分)中使用 propertyGrid,我是 wpf 的新手。如何在这个项目中添加正确的 PropertyGrid,我可以在设计器画布中显示每个项目的所有属性,也可以从设计器画布中多选项目以显示公共属性,并且我在设计器中为每个项目都有自定义属性。如果大家有经验或有类似的样品,请与我分享。谢谢你

4

1 回答 1

1

您可以在 WPF 应用程序中使用 windows PropertyGrid。您可以创建一个包含您想在 propertygrid 中显示的所有属性的类,例如:

[TypeConverter(typeof(AllItemsTypeConverter))]   
public class AllItems
{

    public string Name
    {
        get { // }
        set { // }
    }

    public String description
    {
        get { // }
        set { // }
    }

}

AllItems 类有一个类型转换器,您可以为您想要的每个对象过滤您的项目,如下所示:

  class AllItemsTypeConverter: ExpandableObjectConverter
    {

        public override PropertyDescriptorCollection GetProperties(
            ITypeDescriptorContext context, object value, Attribute[] attributes)
        {

            var originalProperties = base.GetProperties(context, value, attributes);
            var propertyDescriptorList = new List<PropertyDescriptor>(originalProperties.Count);

            foreach (PropertyDescriptor propertyDescriptor in originalProperties)
            {
                bool showPropertyDescriptor = true;
                switch (propertyDescriptor.Name)
                {
                    // this properties belong to Input
                    case "InputPlayInstance": showPropertyDescriptor = designerNode.ShowInput; break;
                    case "InputNodeInputSetup": showPropertyDescriptor = designerNode.ShowInput; break;
                    case "InputGrammerList": showPropertyDescriptor = designerNode.ShowInput; break;


.
.
.
.
                }

                if (showPropertyDescriptor) propertyDescriptorList.Add(propertyDescriptor);
            }


            return new PropertyDescriptorCollection(propertyDescriptorList.ToArray());
        }
    }

该类覆盖“ExpandableObjectConverter”类的“GetProperties”方法,您可以指定该属性是否属于特定对象。

于 2013-02-17T08:56:01.867 回答