c#-更改我的windows窗体的外观

c#-更改我的windows窗体的外观,c#,skin,C#,Skin,我正在开发一个windows窗体。我想更改窗体及其控件的物理外观。我能够使用Skincrafter演示,但是这使应用程序变得更加沉重。我不满意在标签页中导航、移动窗口等时的“沉重”感觉。这是一个相当简单的程序,不使用skincrafter时我没有这个问题。当不使用它时,GUI的响应速度非常快,我希望保持这种状态 我试过很多不同的皮肤,结果都非常相似 所以我不会使用skincrafter,除非有人指出这个GUI速度较慢的可能原因。我遵循他们的指导,没有做任何其他事情。简单的过程。前:快速GUI-后

我正在开发一个windows窗体。我想更改窗体及其控件的物理外观。我能够使用Skincrafter演示,但是这使应用程序变得更加沉重。我不满意在标签页中导航、移动窗口等时的“沉重”感觉。这是一个相当简单的程序,不使用skincrafter时我没有这个问题。当不使用它时,GUI的响应速度非常快,我希望保持这种状态

我试过很多不同的皮肤,结果都非常相似

所以我不会使用skincrafter,除非有人指出这个GUI速度较慢的可能原因。我遵循他们的指导,没有做任何其他事情。简单的过程。前:快速GUI-后:慢速GUI

有人能给我推荐另一种方法来更改控件/窗体的外观吗?有没有办法在不依赖第三方蒙皮软件的情况下通过编程更改控件和窗体的外观

请注意,我不希望我的用户更改皮肤。我想申请一个,就这样

多谢各位 史蒂夫

编辑: 这个项目还远没有完成,所以我会给WPF一些真正好的想法,这样当我有一个4倍于现在的大屏幕时,我就不会这样做了。 我已经开始转换了,应该没什么问题。从工具箱中找不到计时器和serialport,计时器被dispatchtimer替换。到目前为止没什么大不了的。 另一件让我想使用WPF的事情是,我可能需要绘制图表(绘图)来显示温度随时间的变化。我使用serialport与外部USB控制器(虚拟COM端口)通信,该控制器读取一组温度传感器和风扇转速。我怀疑用WPF作图会更好。 最后一件事:它只是关于颜色/字体,但更多关于按钮的外观,实际窗口的外观(边框形状)。我想做的是与html和css类似的事情。我确实希望有自定义标签,让他们的实时温度和风扇转速测量的“数字显示”的外观


再次感谢大家提供的帮助

在遥远的过去,我通过对开箱即用控件(标签、文本框等)进行子类化,并让该子类从XML文件(也可以使用app.config)中读取外观配置(例如颜色、字体),为WinForms项目添加了轻量级蒙皮

这种方法很容易实现,而且我没有看到明显的性能下降

如果您只想获得一致的新外观,而不需要让最终用户从各种皮肤中进行选择,那么子类化方法非常简单。例如,要修改标签的外观,请执行以下操作:

public MyLabel : Label
{
    MyLabel()
    {
        this.ForeColor = Colors.Blue;
    }
}
然后,只要代码中当前有标签,就使用MyLabel


如果您正在启动一个新项目,我强烈建议您改用WPF。它提供了更灵活的UI框架。一个关键特性是它将外观与UI实现分离。

您可以查看商业控件套件,如Telerik和DevXPress。但是如果你真的关心UI,我听说最好还是转到WPF。这在windows窗体中并非不可能,但肯定更难。我还建议您为此寻找第三方。你不大可能在合理的延迟内想出更好的办法。要么这样,要么干脆放弃剥皮的想法。
有人能给我推荐另一种方法来更改控件/窗体的外观吗?
-您正在寻找。在创建基于.Net的Windows桌面应用程序时,它是首选的UI框架。winforms是一项非常古老的技术,不支持任何级别的丰富性或定制。谢谢您的建议。与许多较小的公司一样,我们没有内部程序员,也没有将其分包的预算。我以前做过一些winform的工作,这项工作稍微重要一点,因为它将被最终用户使用,而不是我以前做的那些我是唯一用户的工作(实验室应用程序)。我想知道将整个项目转移到WPF有多困难,但我会研究一下。感谢您,这几乎完全取决于您设计项目的好坏。如果您遵循一些好的实践并将逻辑与UI分离,那么它应该相当简单,因为您可以重用其他层。谢谢您的建议。与许多较小的公司一样,我们没有内部程序员,也没有将其分包的预算。我以前做过一些winform的工作,这项工作稍微重要一点,因为它将被最终用户使用,而不是我以前做的那些我是唯一用户的工作(实验室应用程序)。我想知道将整个项目转移到WPF有多困难,但我会研究一下。感谢如果这是一个现有的项目,而您没有内部程序员,那么改进WinForms可能是一个更好的解决方案。我将添加更多关于如何子类化的细节。如果您只需要改善外观,而不需要使其成为灵活的外观(用户可以选择哪种外观),子类策略非常简单。需要指出的是,“自定义”的概念不仅仅是更改颜色或UI元素的属性,winforms中真正的自定义需要一种称为“所有者绘制”的技术,这真的很麻烦和乏味。@HighCore:当然,但是基本的灰底黑外观可以通过可用的属性得到显著改善。OP的目标是在有限的资金和编程专业知识的限制下,使这个应用程序比内部应用程序更好一些,因为最终客户会看到它。我编辑了我的问题。似乎WPF可能是一种更好的方式,因为我可能需要图形和窗口的边框形状。如果我不能将我的项目转移到WPF,我可能最终会这样做!非常感谢。