C# 控件继承在Windows窗体应用程序中实现一致的外观

C# 控件继承在Windows窗体应用程序中实现一致的外观,c#,.net,winforms,C#,.net,Winforms,我正在构建一个windows窗体应用程序,在这个应用程序中,所有模块的外观都非常一致,这是非常重要的。除了标准的.NET控件外,它还使用了许多来自不同供应商的第三方控件。我想有能力改变整个外观和感觉的应用程序在一次过,可能是与升级版本的软件。非常类似于蒙皮,但通常我看到第三方提供商的蒙皮功能仅在我拥有多个供应商的控件时才能与他们的控件集很好地配合使用 我计划构建一整套从.NET控件或第三方控件(如果相关)继承的用户控件,并且仅使用我们的控件集。这样,我可能需要创建很多控件,例如文本、下拉列表、列

我正在构建一个windows窗体应用程序,在这个应用程序中,所有模块的外观都非常一致,这是非常重要的。除了标准的.NET控件外,它还使用了许多来自不同供应商的第三方控件。我想有能力改变整个外观和感觉的应用程序在一次过,可能是与升级版本的软件。非常类似于蒙皮,但通常我看到第三方提供商的蒙皮功能仅在我拥有多个供应商的控件时才能与他们的控件集很好地配合使用

我计划构建一整套从.NET控件或第三方控件(如果相关)继承的用户控件,并且仅使用我们的控件集。这样,我可能需要创建很多控件,例如文本、下拉列表、列表、网格、DTPicker等。但我想我会对外观有一个合理的控制,也就是说,我可以传播基础中的任何更改,例如在所有位置使用Tahoma字体,而不是MS Sans Serif,只需重建整个应用程序

我还认为,仅在应用程序中更改字体的能力,以及其他功能,几乎所有类型的控件都需要继承

问题:

您是否认为这是控制继承在应用程序中实现一致外观的正确方法

您是否支持一次性更改整个应用程序字体的功能


非常感谢您的建议和评论

1。我想你会有庞大的等级制度。在我看来,为一组控件设置适配器更好

例如,基础设施具有复杂的、在许多方面不符合逻辑的继承层次结构。
如果我必须快速实现蒙皮,我会在一个公共表单或其他容器类中实现蒙皮逻辑,而不是创建大量自己的控件

1。我想你会有庞大的等级制度。在我看来,为一组控件设置适配器更好

例如,基础设施具有复杂的、在许多方面不符合逻辑的继承层次结构。
如果我必须快速实现蒙皮,我会在一个公共表单或其他容器类中实现蒙皮逻辑,而不是创建大量自己的控件

是否有机会使用WPF?我怀疑Windows窗体中控件开发的复杂性随着继承级别的增加而呈指数增长


WPF提供了内置的/专为蒙皮而设计的,更易于实现和维护。我强烈建议探索这条道路,如果可以的话,使用WPF。

有没有机会使用WPF?我怀疑Windows窗体中控件开发的复杂性随着继承级别的增加而呈指数增长


WPF提供了内置的/专为蒙皮而设计的,更易于实现和维护。我强烈建议您探索这一途径,并尽可能使用WPF。

至于Winforms,我知道有一些控件集允许类似的事情。Janus有一组很好的控件,它们都可以注册到所谓的VisualStyleManager中。更改样式管理器的主题将自动对所有控件进行蒙皮


我不认为自己实现这一点会让您感到高兴……只要在Janus或其他组件上花点钱就行了。

至于Winforms,我知道有一些控件集可以实现类似的功能。Janus有一组很好的控件,它们都可以注册到所谓的VisualStyleManager中。更改样式管理器的主题将自动对所有控件进行蒙皮


我不认为自己实现这一点会让您感到高兴……只需在Janus或其他组件上花一些钱。

如果控件本身没有提供足够定制其外观所需的属性,则蒙皮/样式应该真正需要继承。如果属性存在,那么真正需要的是一种动态枚举控件并配置其属性以匹配样式的方法。对于样式管理器中一些丑陋的切换逻辑来说,这仍然是一个难题,但这比覆盖每个UI控件要容易得多。有趣的方向!!正如我对@STO的评论一样,我将探索这一性能和可用性领域,在这里,我将通过一个剥皮器传递我的所有表单控件,剥皮器将剥皮它所拥有信息的控件。不过,我对性能有点担心。如果控件本身没有提供充分自定义其外观所需的属性,则蒙皮/样式应该真正需要继承。如果属性存在,那么真正需要的是一种动态枚举控件并配置其属性以匹配样式的方法。对于样式管理器中一些丑陋的切换逻辑来说,这仍然是一个难题,但这比覆盖每个UI控件要容易得多。有趣的方向!!正如我对@STO的评论一样,我
我将探索这个性能和可用性领域,在这里我将通过一个剥皮者传递我的所有表单控件,剥皮者将剥皮它所拥有的信息的控件。不过,我对性能有点担心。抱歉,我们的时间不够,而且WPF对于关键类型的应用程序(例如,大容量处理POS系统)仍然没有经过时间测试。不过,我的体系结构有足够的分层,将来可以很容易地用WPF替换UI层。当时间合适时,我们会这样做:对不起,我们的时间很短,而且WPF对于关键类型的应用程序(如大容量处理POS系统)仍然没有经过时间测试。不过,我的体系结构有足够的分层,将来可以很容易地用WPF替换UI层。到时候你会这么做的:你没有仔细阅读我的帖子。我正在使用Infragistics、ComponentOne和其他一些组件-所有组件都是经过许可的!!但是,正如我提到的,任何蒙皮功能都与供应商的特定控件集一起工作。例如,Infragistics的AppStylest不会与ComponentOne合作。我需要一些在所有情况下都能工作的标准化:对不起,我当时误解了你的意图。根据你的描述,我不确定这是否可能。基本上,如果你没有仔细阅读我的文章,你应该坚持使用你拥有的剥皮者,例如AppStylest,并为他们创建一个适配器。我正在使用Infragistics、ComponentOne和其他一些组件-所有组件都是经过许可的!!但是,正如我提到的,任何蒙皮功能都与供应商的特定控件集一起工作。例如,Infragistics的AppStylest不会与ComponentOne合作。我需要一些在所有情况下都能工作的标准化:对不起,我当时误解了你的意图。根据你的描述,我不确定这是否可能。基本上,你应该坚持你的剥皮者,例如AppStylest,并为他们创建一个适配器