如何在Windows窗体中实现属性窗口样式控件/系统?

时间:2009-10-16 21:03:26

标签: c# .net winforms reflection

所以我要做的是设置一个带有某些控件的UI,我希望有一些类实例来填充值。

例如:

可以填充UI的类:

Sharpen, Blur, Smear, ... : FilterBase

因此,每当用户创建上述类的实例时,我都希望通过使用类实例自动获取基于UI控件的值。

用户界面包含以下内容:

.Name (TextBox)
.Amount (NumericUpDown)
.Decay (NumericUpDown)

因此,如果当前实例为s = new Sharpen(),我想让s.Name填写UI.Name。

如何以最佳方式执行此操作?优雅,清晰,表现明智等。

我将使用反射,但如何存储对象的实例(锐化,...)并且类型安全?我应该使用System.Object吗?还是T?

public partial class ParamsUI
{
    T CurrentFilter (?)
    ...
}

另外,如果我使用T,我怎么知道要把它扔到哪里?

有更好的方法吗?

1 个答案:

答案 0 :(得分:3)

由于这是使用Windows窗体,因此最灵活的选择可能是直接使用Windows窗体PropertyGrid。

您可以做很多工作来自定义外观。有关详细信息,请参阅获取Most Out of the .NET Framework PropertyGrid Control


编辑:

如果您想拥有一个非常灵活,简单的选项,并且WPF是一个选项(托管在ElementHost中),您可以考虑使用WPF。

有了这个,你可以托管一个只包含资源字典和ContentControl的UserControl。

然后,您可以为要编辑的每个项目创建自定义XAML文件,并在资源中设置数据模板,指定要为其编辑的每个元素使用哪个用户控件(xaml)的映射。然后,您可以在代码中将元素设置为用户控件的“DataContext”,它将自动连接所有内容并“正常工作”。