我正在开发一个Windows窗体。我想改变表单及其控件的外观。我能够使用Skincrafter演示,但这使得应用程序变得更加重。我不满意"重"在浏览选项卡,移动窗口等时会有这种感觉。这是一个相当简单的程序,在不使用skincrafter时我没有这个问题。当不使用它时,GUI非常敏感,我想保持这种方式。
我尝试了很多不同的皮肤,结果在每种情况下都非常相似。
所以我不会使用skincrafter,除非有人指出我这个较慢的GUI的可能原因。我按照他们的教程,没有做任何其他事情。简单的过程。之前:快速GUI - 之后:慢GUI。
有人可以推荐我另一种方法来改变我的控件/表单的外观吗?有没有办法以编程方式改变控件和表单的外观,而不依赖于第三方皮肤软件?
请注意,我不希望我的用户更改皮肤。我想申请一个,那就是它。
谢谢你 史蒂夫编辑: 这个项目还远没有完成,所以我要给WPF一些真正好的想法,所以当我的速度是现在的4倍时,我不会这样做。 我已经开始转换了,它应该不是很大的问题。发现计时器和序列端口不能位于工具箱前面,计时器由调度程序替换。到目前为止没什么大事。 另一件让我想要使用WPF的事情是我可能需要制作图表(绘图)以显示温度随时间的变化。我使用serialport与外部USB控制器(虚拟COM端口)进行通信,该控制器读取一堆温度传感器和风扇速度。我怀疑使用WPF会更好。 最后一件事:它只是关于颜色/字体,但更多关于按钮的外观,实际窗口的外观(边框形状)。我想做的是用html和css做的类似的事情。我确实希望有自定义标签,让他们看起来像数字显示器"用于实时温度和风扇速度测量。
再次感谢所有人提供的帮助!
答案 0 :(得分:0)
在遥远的过去,我通过子类化开箱即用的控件(Label,TextBox等),并在外观配置(例如颜色,字体)中读取子类,为WinForms项目添加了轻量级蒙皮。 XML文件(也可以使用app.config)。
这种方法很容易实现,我看到没有明显的性能下降。
如果您只是想要一致的新外观并且不需要让最终用户从各种皮肤中进行选择,那么子类化方法非常简单。例如,要修改Label
的外观:
public MyLabel : Label
{
MyLabel()
{
this.ForeColor = Colors.Blue;
}
}
然后,在您的代码中当前有一个Label的地方,请使用MyLabel。
如果您要开始一个新项目,我强烈建议您使用WPF。它提供了更灵活的UI框架。一个关键特性是它将外观与UI实现分开。