【问题标题】:Control inheritance for consistent look and feel in a Windows Forms application控制继承以在 Windows 窗体应用程序中实现一致的外观
【发布时间】:2010-09-09 11:29:25
【问题描述】:

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

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

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

问题:

  1. 您认为这是在整个应用程序中实现一致外观和感觉的正确方法(控制继承)吗?

  2. 您是否支持一次性更改整个应用程序字体这一良好要求?

建议,cmets 非常感谢。

【问题讨论】:

    标签: c# .net winforms


    【解决方案1】:

    1)。恕我直言,您将拥有庞大的层次结构。在我看来,最好有一组控件的适配器。

    例如,Infragistics 具有复杂性,并且在许多方面具有不合逻辑的继承层次结构。 如果我必须快速实现换肤,我会在通用表单(或其他容器)类中实现换肤逻辑,而不是创建大量自己的控件。

    【讨论】:

    • 皮肤/样式设计应该只在控件本身不提供充分自定义其外观和感觉所需的属性时才需要继承。如果属性在那里,那么真正需要的是一种动态枚举控件并配置它们的属性以匹配样式的方法。这仍然是一个难题(样式管理器中有一些难看的切换逻辑),但它比覆盖每个 UI 控件要容易得多。
    • 有趣的方向!!正如我还评论了@STO,我将探索这个领域的性能和可用性,我将通过一个“Skinner”传递我的所有表单控件,该“Skinner”将为它具有相关信息的控件设置外观。不过我对性能有点担心。
    【解决方案2】:

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

    WPF 提供了更易于实施和维护的内置/专门设计的皮肤。我强烈建议您探索该途径并尽可能使用 WPF。

    【讨论】:

    • 抱歉,我们的时间不够用,而且 WPF 仍未针对关键类型的应用程序(例如,大容量处理 POS 系统)进行时间测试。我的架构虽然有足够的分层,但将来很容易用 WPF 替换 UI 层。时机成熟时会这样做:)
    【解决方案3】:

    至于 Winforms,我知道一些控制集允许类似的事情。 Janus 有一组很好的控件,它们都可以注册到所谓的 VisualStyleManager。更改 StyleManager 的主题将自动为所有控件设置外观。

    我不自己实现它会让你开心...继续花几块钱购买 Janus 或其他组件。

    【讨论】:

    • 你没有仔细阅读我的帖子。我也在使用 Infragistics、ComponentOne 和其他一些组件 - 全部获得许可!但是,正如我所提到的,任何蒙皮功能都适用于供应商的特定控件集。例如。 Infragistics 的 AppStylist 不适用于 ComponentOne。我需要一些适用于所有情况的标准化。 :)
    • 对不起,我误解了你的意图。根据您的描述,我不确定这是否可能。基本上,您应该坚持使用您拥有的 Skinner(例如 AppStylist)并为他们创建一个适配器
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多