曲无名 2023-06-01 08:53 采纳率: 80%
浏览 33
已结题

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

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

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

下图是winform实现的功能

img

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-06-01 12:58
    关注
    • 这篇博客: 在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中的示例。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月25日
  • 已采纳回答 7月17日
  • 创建了问题 6月1日

悬赏问题

  • ¥15 pcl运行在qt msvc2019环境运行效率低于visual studio 2019
  • ¥15 MAUI,Zxing扫码,华为手机没反应。可提高悬赏
  • ¥15 求帮看看那里的问题ssh项目报错
  • ¥15 python运行报错 ModuleNotFoundError: No module named 'torch'
  • ¥100 华为手机私有App后台保活
  • ¥15 sqlserver中加密的密码字段查询问题
  • ¥20 有谁能看看我coe文件到底哪儿有问题吗?
  • ¥20 我的这个coe文件到底哪儿出问题了
  • ¥15 matlab使用自定义函数时一直报错输入参数过多
  • ¥15 设计一个温度闭环控制系统