什么是WPF / XAML的开源替代品?

时间:2010-06-03 01:53:59

标签: wpf user-interface xaml open-source declarative-programming

如果我们从HTML / CSS中学到了什么,那么声明性语言(如XML)可以很好地描述用户界面,因为:

  1. 构建可以有效模板化代码的代码预处理器很容易。
  2. 代码采用结构良好(理想情况下)格式良好,因此很容易解析。
  3. 有效解析或抓取基于XML的源文件的技术已经存在。
  4. UIs脚本代码变得更加简单易懂。
  5. 设计师能够自行设计界面非常简单。
  6. 程序员很难创建UI,因此应该让设计师能够轻松完成。
  7. 我最近看了一下WPF应用程序的内容(即XAML),它看起来非常熟悉HTML中使用的声明性语言风格。

    桌面UI开发的当前状态在很大程度上是分数化的,否则在图形用户界面设计领域(IE.GTK,XUL,Qt,Winforms,WPF等)中将没有那么多的重复工作。

    There are 45 GUI platforms for Python alone

    什么是代表这些特征的开源GUI:

    • 标准化
    • 平台独立
    • 声明性标记语言
    • 语言不可知

    WPF,或更具体地说,XAML似乎是朝着正确方向迈出的可能的一步。

    更新

    非常感谢您的信息,请保持信息。以下是我从评论和答案中收集的选项。

    GladeXML

    • 编辑:Glade Interface Designer
    • OS平台:全部
    • GUI平台:GTK+
    • 语言:C(libglade),C ++,C#(Glade#),Python,Ada,Pike,Perl,PHP,Eiffel,Ruby

    XRC (XML Resource)

    基于XML的格式,不是免费的,不是跨平台的,也不是特定于语言的

    XUL

    • 编辑:任何基本文本编辑器
    • OS平台:运行支持XUL的浏览器的任何操作系统
    • GUI平台:Gecko Engine?
    • 语言:C ++,Python,Ruby作为插件语言而非基础语言

    注意:我不确定XUL是否值得在此列表中提及,因为它不是桌面GUI语言,而是更多的make-webapps-on-the-desktop语言。另外,它需要浏览器才能运行。 IE,它是'用于桌面的DHTML'。

    CookSwing

    XAML (Moonlight)

    • 编辑:MonoDevelop
    • OS平台:仅限Linux和其他基于Unix / X11的操作系统
    • GUI平台:GTK+
    • 语言:.NET

    注意:XAML不是纯粹的开源格式,因为Microsoft控制其使用条款,包括随时更改条款的权利。月光不能合法地在Windows或Mac上运行。此外,唯一免于法律诉讼的平台是Novell。 See this全面描述我的意思。 XAML也不是像C#,托管C ++和CLR那样的ECMA标准。

    更新:问题已经从“是否有WPF的开源替代品?”因为最初的问题是错误的,而且它很糟糕。这个问题的方向改变了方向以匹配与新的意见。我向那些在变化之前做出回应的人道歉。

3 个答案:

答案 0 :(得分:14)

Qt正在开发QML,除了JSON外,它看起来很像XAML。它可以作为针对当前版本构建的预览版本,并且可以在下一版本的快照中使用。

以下是http://doc.qt.nokia.com/4.7-snapshot/declarative-ui-components-progressbar.html

的一小段摘录
import Qt 4.7
import "content"

Rectangle {
   id: main

    width: 600; height: 405
    color: "#edecec"

    Flickable {
       anchors.fill: parent
       contentHeight: column.height + 20

       Column {
           id: column
           x: 10; y: 10
           spacing: 10

           Repeater {
               model: 25

               ProgressBar {
                 property int r: Math.floor(Math.random() * 5000 + 1000)
                 width: main.width - 20

                 NumberAnimation on value { duration: r; from: 0; to: 100; loops: Animation.Infinite }
                 ColorAnimation on color { duration: r; from: "lightsteelblue"; to: "thistle"; loops: Animation.Infinite }
                 ColorAnimation on secondColor { duration: r; from: "steelblue"; to: "#CD96CD"; loops: Animation.Infinite }
               }
           }
       }
   }
}

答案 1 :(得分:7)

  • 网络正在消除桌面应用程序中的大部分功能。

    我认为最重要的原因是每个人现在都专注于网络。 HTML5将成为网络可以实现的巨大飞跃。借助快速的JavaScript解释器和功能强大的浏览器,随着时间的推移,对桌面程序的需求将开始减弱。这就是谷歌所追求的马,也是苹果公司的赌注。

  • 创建好的东西会对每个操作系统产生完全不同的实现,因此基础工具包本身不会非常便携。

    如果您考虑一下,Web是我们在跨平台方式开发此类基础架构时唯一真正的基础。 WPF与架构视角与WinForms /直接WinAPI代码完全不同。如果你要做一些表现良好的东西,那么为每个操作系统调整类似的东西会为每个操作系统带来很多不同的管道。 (并不是说网络应用程序非常快,请注意,但它们会越来越好)。

  • 外观总是有点问题。

    你使用谁的外观和感觉?您是否尝试将UI调整为OS chrome以使其看起来像“原生”,或者您是否做过像Swing多年前做过的事情并开发看起来与其他所有内容截然不同的应用程序? (呃,那是火车残骸......)如果你选择让UI适应每个操作系统的外观,你可能会遇到各种各样的测量和设计问题。

答案 2 :(得分:3)

Novell有一个Silverlight的开源实现,对XAML有很大支持,称为Moonlight:

http://en.wikipedia.org/wiki/Moonlight_(runtime)

http://www.mono-project.com/Moonlight