wpf 怎么使用Winform中的propertyGrid控件?
wpf 怎么使用Winform中的propertyGrid控件,将类里面的属性全部展示出来我上网找了方法但是实现不了( 这是我找到的文章,但是没实现出来 http://t.csdn.cn/U4zOs)
下图是winform实现的功能
wpf 怎么使用Winform中的propertyGrid控件?
wpf 怎么使用Winform中的propertyGrid控件,将类里面的属性全部展示出来我上网找了方法但是实现不了( 这是我找到的文章,但是没实现出来 http://t.csdn.cn/U4zOs)
下图是winform实现的功能
在窗体上添加一个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;
}
我可以提供如下解决方案:
首先,需要将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中的示例。