Winforms属性网格中的类别层次结构

3

我有一些属性,可以分为不同的类别和子类别。当我将它们添加到PropertyGrid中时,所有的子类别都在根目录下,但我希望子类别成为类别的子项。

class Settings
    {
        [Category("SubCategory1")]
        public bool Property1 { get; set; }

        [Category("SubCategory1")]
        public bool Property2 { get; set; }

        [Category("SubCategory2")]
        public bool Property3 { get; set; }
    }

PropertyGrid grid = new PropertyGrid();    
grid.SelectedObject = new Settings();

我希望你能将这个看起来变成这样。
 -Category1
   -SubCategory1
      Property1
      Property2
   -SubCategory2
      Property3

你自己尝试过什么了吗?你已经有什么代码了吗?如果有的话,能展示一些吗?... - Abbas
3
抱歉,我可以进行英文到中文的翻译,但无法访问给定链接的内容。 请提供要翻译的具体文本或将其复制并粘贴在此处,这样我就可以帮助您进行翻译。 - vulkanino
这篇文章中并没有关于类别层次结构的内容。我找到了一个带有我需要功能的控件。http://visualstudiogallery.msdn.microsoft.com/A4A710C1-7B90-4C36-A4FA-FF12B99B54C6。但是我想使用标准的PropertyEditor来创建嵌套属性。 - PSsam
1个回答

9
我找到了一个解决方案。方法是使用TypeConverter属性和嵌套类。
var settings = new Settings();
settings.Subcategory1 = new SubCategory1(){Property1 = "P1", Property2 = "P2"};
settings.Subcategory2 = new SubCategory2(){Property3="P3"};
grid.SelectedObject = settings;

...

public class Settings
{
    [Category("Category1")]
    public SubCategory1 Subcategory1 { get; set; }

    [Category("Category1")]
    public SubCategory2 Subcategory2 { get; set; }
}

[TypeConverter(typeof (ExpandableObjectConverter))]
public class SubCategory1
{
    public String Property1 { get; set; }

    public String Property2 { get; set; }

    public override string ToString()
    {
        return String.Empty;
    }
}

[TypeConverter(typeof(ExpandableObjectConverter))]
public class SubCategory2
{
    public String Property3 { get; set; }

    public override string ToString()
    {
        return String.Empty;
    }
}

希望这能对某些人有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接