关于#wpf#的问题:wpf 怎么使用Winform中的propertyGrid控件,将类里面的属性全部展示出来我上网找了方法但是实现不了(语言-c#)

wpf 怎么使用Winform中的propertyGrid控件?

wpf 怎么使用Winform中的propertyGrid控件,将类里面的属性全部展示出来我上网找了方法但是实现不了( 这是我找到的文章,但是没实现出来 http://t.csdn.cn/U4zOs

下图是winform实现的功能

img

  • 这篇博客: 在winform项目中用PropertyGrid显示、编辑集合的属性中的 5 在PropertyGrid中显示对象属性 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 在窗体上添加一个PropertyGrid控件,在窗体的Form1_Load事件中调用以下代码。

            private void LoadProperty()
            {
                Employee a = new Employee();
                a.Name = "樊大姐";
                a.Gender = EnumGender.;
                a.HairColor = Color.Yellow;
    
                Employee b = new Employee();
                b.Name = "张小蛋";
                b.Gender = EnumGender.;
                b.HairColor = Color.Black;
    
                Company company = new Company();
                company.Employees.Add(a);
                company.Employees.Add(b);
                company.Address = "北京";
                company.Name = "100度";
    
                this.propertyGrid2.SelectedObject = company;
            }
    
  • 以下回答由chatgpt基于相关博客总结生成:

    我可以提供如下解决方案:

    首先,需要将Windows.Forms程序集添加到WPF项目的引用中。

    然后,需要添加一个类来继承自System.Windows.Forms.PropertyGrid,并对其进行一些自定义。

    代码如下:

    public class CustomPropertyGrid : System.Windows.Forms.PropertyGrid
    {
        private object selectedObject;
    
        public object SelectedObject
        {
            get { return selectedObject; }
            set
            {
                selectedObject = value;
                this.Refresh();
            }
        }
    
        protected override void OnSelectedObjectsChanged(EventArgs e)
        {
            base.OnSelectedObjectsChanged(e);
            this.SelectedObject = this.SelectedObject;
        }
    
        protected override void OnLayout(LayoutEventArgs e)
        {
            base.OnLayout(e);
            this.Refresh();
        }
    
        protected override void OnPaint(PaintEventArgs pevent)
        {
            if (this.SelectedObject != null)
            {
                this.SelectedObjects = new object[] { this.SelectedObject };
            }
    
            base.OnPaint(pevent);
        }
    }
    

    然后,可以在WPF程序中使用该控件,并将需要展示属性的对象赋值给SelectedObject属性即可。

    代码如下:

    var propertyGrid = new CustomPropertyGrid();
    propertyGrid.Dock = DockStyle.Fill;
    
    var company = new Company();
    propertyGrid.SelectedObject = company;
    
    var winformHost = new System.Windows.Forms.Integration.WindowsFormsHost
    {
        Child = propertyGrid
    };
    
    this.grid.Children.Add(winformHost);
    

    需要注意的是,如果SelectedObject的属性有集合类型,需要为该集合类型添加一个编辑器,可以参考参考资料中的段落4中的示例。

wpf也是可以调用winforms组件的
另一个办法是自己反射,也可以获得属性列表,然后自己往 Grid 类型的界面上填充