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

C# 如何在Windows窗体中实现属性窗口样式控件/系统?,c#,.net,winforms,reflection,C#,.net,Winforms,Reflection,所以我想做的是用一个带有特定控件的集合UI,我想用一些类实例来填充这些值 例如: 可以填充UI的类: Sharpen, Blur, Smear, ... : FilterBase 因此,每当用户创建上述类的实例时,我希望通过使用类实例,基于UI控件自动获取值 该UI包含以下项: .Name (TextBox) .Amount (NumericUpDown) .Decay (NumericUpDown) 因此,如果当前实例是s=new锐化(),我想让s.Name填写UI.Name 我如何以最好

所以我想做的是用一个带有特定控件的集合UI,我想用一些类实例来填充这些值

例如:

可以填充UI的类:

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

该UI包含以下项:

.Name (TextBox)
.Amount (NumericUpDown)
.Decay (NumericUpDown)
因此,如果当前实例是
s=new锐化()
,我想让s.Name填写UI.Name

我如何以最好的方式做到这一点?优雅、清晰、性能良好等

我将使用反射,但如何存储对象的实例(锐化…)并确保类型安全?我是否应该使用
系统.Object
?还是T

public partial class ParamsUI
{
    T CurrentFilter (?)
    ...
}
同样,如果我使用T,我如何知道将它投射到什么地方


有更好的方法吗?

因为这是使用Windows窗体,所以最灵活的选择可能是直接使用Windows窗体属性Grid

你可以做大量的工作来定制它的外观和感觉。有关详细信息,请参见获取


编辑:

如果你想要一个非常灵活、容易的选项,WPF是一个选项(托管在一个元素中),你可以考虑使用WPF。 有了它,您可以托管一个UserControl,它只包含一个资源字典和一个数据库


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

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

你可以做大量的工作来定制它的外观和感觉。有关详细信息,请参见获取


编辑:

如果你想要一个非常灵活、容易的选项,WPF是一个选项(托管在一个元素中),你可以考虑使用WPF。 有了它,您可以托管一个UserControl,它只包含一个资源字典和一个数据库


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

什么UI框架?这在WPF中是微不足道的-例如,在Windows窗体中更难…很抱歉,这是Winforms。顺便说一句,在WPF中有多容易?在WPF中有多容易,那是多么容易咧嘴笑。也就是说,您可以在Windows窗体中执行类似的操作:它的灵活性稍差,但应该足以用于简单的文本、数字控件和值?我的意思是,你提供类名来填充吗?@itowlson:我考虑更多的是使用数据模板,而只是为每个类创建一个视图。然后你就可以给全班同学提供食物,它会为你做一切。。。在我看来,WPF使这类事情变得更容易。什么UI框架?这在WPF中是微不足道的-例如,在Windows窗体中更难…很抱歉,这是Winforms。顺便说一句,在WPF中有多容易?在WPF中有多容易,那是多么容易咧嘴笑。也就是说,您可以在Windows窗体中执行类似的操作:它的灵活性稍差,但应该足以用于简单的文本、数字控件和值?我的意思是,你提供类名来填充吗?@itowlson:我考虑更多的是使用数据模板,而只是为每个类创建一个视图。然后你就可以给全班同学提供食物,它会为你做一切。。。在我看来,WPF让这类事情变得容易多了。谢谢里德,我会去看看。在@Darwyn有一个更好的教程:这个教程是关于使用它的,但不一定是关于自定义类的显示方式。它涵盖了一个不同于我所追求的主题。谢谢里德,我会查看它。在@Darwyn有一个更好的教程:该教程是关于使用它的,但不一定是关于自定义类的显示方式。它涵盖了一个不同于我所追求的主题。