65.9K
CodeProject 正在变化。 阅读更多。
Home

OpenTheme:一个开源图形用户界面 (GUI) 工具包

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.96/5 (151投票s)

2004年10月22日

2分钟阅读

viewsIcon

746758

XAML 和 XUL 的创新替代方案

Sample Image - maximum width is 600 pixels

引言

OpenTheme 是一个基于 XML 的 GUI 工具包,包含一组基础类和 WYSIWYG 编辑器。虽然它最初是为全屏 GUI 设计的,但它也适用于窗口用户界面,具有完全的本地化支持和任意外观。

我在以下网址准备了一个完整的教程

背景

当我开发我的 OpenHTPC 项目时,我一直在思考如何让它看起来很酷。由于我不是图形设计师,我知道我永远不会真正设计任何“酷”的图形。这引出了一个有趣的旧问题:有没有一种方法可以将图形用户界面的设计与业务逻辑的设计完全分离?

好吧,既然我相信我是一个相当好的软件架构师,我想我可以更好地完成这项工作。最后,我设计了这个 OpenTheme 项目。在这个项目中,我尝试了一些新技术。最后,我终于有机会在这个项目中表达我对软件设计和实现的看法。

使用代码

这仍然是初步的 Alpha 版本。所以一些设计仍然可能发生变化。理解设计的最好方法是从用户的角度阅读 教程

但是这个版本已经足够稳定了。 ThemeEditor 可用于设计整个 ThemePack。在您的代码中,只需使用以下代码加载 ThemePack。

// Create a ThemePack
ThemePack tp = ThemePack.FromXml(fileName, null);
// Run through Themes contained in the ThemePack

foreach (Theme curTheme in tp)
{
   // ........
}

// Get a Top Level page from Theme
ThemeObject themeObj = curTheme.GetThemeObject(ID);
// Draw this ThemeObject with a Graphics
themeObj.SetBounds(......);
themeObj.RecalculateLayout(Graphics g);
themeObj.Invalidate(Graphics g);

关注点

主题是分层图形(具有 alpha 透明度)和布局管理器的集合。 系统提供了一组“原子”组件,例如图像 (OpenThemePictureBox)、文本 (OpenThemeTextBox)、颜色块 (OpenThemeColorBox)。组件可以在其边界内包含子组件。子组件可以包含其他子组件。

系统还提供了一些更复杂的组件,具有自定义代码,用于确定其子组件的边界,以便进行更复杂的布局管理。 那些被称为“容器”组件。

程序员可以轻松地实现他们自己的“原子”组件和“容器”组件。例如,系统提供了一个按钮组件,以支持具有完全用户自定义外观的按钮。以下是该按钮在不同状态下的外观。

禁用

Enabled

活动

Focused

切换

另一个例子是水平滚动条。

该逻辑已完成,可以定义任何常用组件(如按钮、单选按钮、滚动条、菜单等),并具有完全用户自定义的外观,适用于全屏或窗口应用程序。

该系统非常轻量级。核心部分的代码只有 2000 多行,并且仅依赖于一些非常基本的 GDI+ 函数和 XML 库。 它甚至不依赖于 Windows Forms 类。 我希望它在不久的将来移植到 Linux 平台和 .Net Compact Framework,只需很少或根本不需要修改。

历史

  • 10 月 20 日,初始 Alpha 版本。

待办事项列表

  • 事件模型
  • 完成所有常用控件
  • Visual Studio .Net 扩展集成
© . All rights reserved.