为 C# 应用程序启用 Windows XP 可视化样式 UI






3.47/5 (31投票s)
2003 年 11 月 1 日
3分钟阅读

181602

2737
为 C# 应用程序启用 Windows XP 可视化样式 UI
引言
本文介绍了为您的 C# 应用程序提供类似 Windows XP 外观的技术。
背景
最近,当我使用 Visual Studio .NET 开发我的第一个 C++ 应用程序时,我发现 TreeView
和 ListView
控件看起来有些类似于 Windows XP 上的控件,"+" 和 "-" 的块具有 3D 外观,当我将鼠标悬停在 ListView
的列标题上时,会出现一个黄色的边框;由于 C# 中没有这样的功能,我决定深入研究 C++ 项目,看看是否可以在 C# 中提供这样的 UI,并找到了允许 C# 应用程序获得 XP 样式控件外观的正确信息,令人惊讶的是,实现这一目标的方法非常简单。
版本
这适用于 .NET 7.0 和 7.1 以及 Windows XP 操作系统(非 Windows 2000 或 Windows 2003 Server);在 Visual Studio .NET 7.1 中,应用程序对象有一个属性 Application.EnableVisualStyles()
。
操作指南
使用 Visual Studio .NET 向导创建一个“Windows 应用程序”,在显示的窗体上放置以下控件
CheckBox
RadioButton
Button
现在 **生成解决方案** 并 **启动** 您的应用程序,您将看不到所显示窗口的任何效果。现在打开 **记事本**,在下面的“清单文件内容”部分,仅标记并复制边框内的代码,然后将其粘贴到新打开的记事本文件中,并将其保存为 “您的项目名称”.exe.manifest 文件,保存在 “您的项目”\bin\debug 文件夹中,或者下载演示 zip 文件并将其中的 “WindowsApplication1.exe.manifest” 文件复制到上述文件夹中并重命名;现在 **启动** 您的项目(无需重新生成解决方案),您仍然会发现显示的窗口没有任何效果,请阅读“设置属性”部分以了解更多信息。
您需要进行复制/粘贴操作,因为文章中只能发布特定类型的文件。
注意点
您可以将上述清单文件 “WindowsApplication1.Exe.manifest” 复制/粘贴到与已完成应用程序可执行文件相同的位置,并将文件名重命名为 “您的应用程序名称”.Exe.manifest(不带引号),请记住将此文件与可执行文件一起分发。
设置属性
Visual Studio .NET 中的一些控件有一个名为 FlatStyle
的属性,此属性默认设置为“Standard
”;您需要将此属性设置为 System
,以便这些控件具有 Windows XP 样式外观(“System”表示操作系统负责设置其可视化样式)。下表显示了具有此类属性的控件的名称。
Control | FlatStyle |
---|---|
Label |
是 |
LinkLabel |
是 |
Button |
是 |
文本框 |
否 |
MainMenu |
否 |
CheckBox |
是 |
RadioButton |
是 |
BroupBox |
是 |
PictureBox |
否 |
Panel |
否 |
DataGrid |
否 |
ListBox |
否 |
CheckedListBox |
否 |
ComboBox |
否 |
ListView |
否 |
树视图 |
否 |
TabControl |
否 |
MonthCalendar |
否 |
DateTimePicker |
否 |
HScrollBar |
否 |
VScrollBar |
否 |
分割器 |
否 |
DomainUpDown |
否 |
NumericUpDown |
否 |
TrackBar |
否 |
进度条 |
否 |
RichTextBox |
否 |
FlatStyle
的缺点
将 Flatstyle
设置为“System
”会阻止这些控件显示 **图像**,这可能是将此属性添加到这些控件的原因;如果您打算在任何这些控件中显示图像,则必须将其设置为“System
”以外的其他值。
清单文件内容
以下是清单文件 “WindowsApplications1.Exe.manifest” 的内容,此文件是 xml 格式,可以使用记事本或写字板等任何文本编辑器打开和编辑,您可以在此文件中添加您的项目名称,但这不会对应用程序产生任何影响。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="Microsoft.Windows.SysInfo"
type="win32"
/>
<description>Your app description here</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
注意
这种为应用程序提供 XP 样式外观的方法不会将信息嵌入到最终应用程序的清单文件中;如果您开发的应用程序是内部使用或提供给您个人认识的客户,这是最好的方法;但是,如果您正在为未知客户开发应用程序,您可以查找 .NET 实用程序 Application Linker (al.exe) 和 Strong Name (sn.exe) 来将有关您产品的信息嵌入到应用程序可执行文件中;这些实用程序通常在 DOS 控制台中运行,并有许多开关需要设置。
历史
- 新文章。