社区亮点

社区亮点

社区亮点

Avalonia 十周年!

Steven Kirk

2023年12月5日

回顾Avalonia的10年历程,很明显,这一里程碑对于社区来说是巨大的成就。Avalonia从最初的实验演变成为一个领先的跨平台框架,被一些大型和著名的组织采用。这个周年纪念不仅是对技术成就的庆祝,也是对开放协作力量的证明,对解决复杂挑战的动力和对持续改进的坚定承诺的体现。在这篇文章中,我们将深入探讨项目的早期历史。

最初的提交

https://github.com/AvaloniaUI/Avalonia/commit/cd2b7530f5e3e0cea2c45c39bdc9a433149c2200

commit c8df546e73f90951f5117f1eeb168a33b207652b
Author: grokys <grokys@gmail.com>
Date:   Wed Dec 11 22:43:22 2013 +0100

当时,Avalonia被称为Perspex,而Perspex源于另一个项目,而这个项目相当令人困惑地被称为 Avalonia

最初的Avalonia是我在尝试重现作为开源项目的WPF时的一次尝试。答案是:“非常困难”,但更重要的是,在经过几个月的断断续续的工作后,我发现这并不有趣。我希望在我看到问题的地方进行改进,而不是盲目地重现WPF的所有问题!

在开始Perspex之前,我还记得在心里想着“但这个世界是否需要另一个不兼容的XAML UI框架?”(那是WPF/ Silverlight/ Metro的时代)。我的答案是“不需要,但是谁在乎呢?反正无人关注。”于是我开始了Perspex的工作,只是为了看看自己能走多远。我从未预料到10年前开始的东西会发展成今天的Avalonia!

最初的提交仅支持Windows,尽管明显有将Perspex做成跨平台的意图,因为所有的Windows特定代码都被放在 Perspex.Windows中。它甚至还有 5个单元测试

运行 TestApplication 展示了在这10年中我们取得的长足进步:

一个简单的“Hello World!”甚至不能正确处理窗口尺寸调整!不过,这在一个半小时后被很快修复了:

https://github.com/AvaloniaUI/Avalonia/commit/c8df546e73f90951f5117f1eeb168a33b207652b

commit c8df546e73f90951f5117f1eeb168a33b207652b
Author: grokys <grokys@gmail.com>
Date:   Wed Dec 11 22:43:22 2013 +0100

    Re-measure/render when window resized

值得注意的是,最初的提交中已经存在了强类型的 DependencyProperty 的替代品,现在我们称之为 AvaloniaProperty (当时称为 PerspexProperty)。

走向一个功能尚算完整的应用

接下来的几个月,Perspex的工作断断续续,主要从实现类CSS样式系统开始。我似乎很享受这些提交信息

commit 581a037cb8b87561003184012f1d48cf732f8fe9
Author: grokys <grokys@gmail.com>
Date:   Tue Feb 4 01:17:42 2014 +0100

    Style council.

commit ae79a51d727f4df07b5e83a03ddcca47478195ff
Author: grokys <grokys@gmail.com>
Date:   Tue Feb 4 02:12:08 2014 +0100

    Styley style.

commit ac659701b8811c6d2e75e6bbb8c40b26a28669e7
Author: grokys <grokys@gmail.com>
Date:   Tue Feb 4 18:00:19 2014 +0100

    Style away the hours.

commit 63f674d897ba4e9b7f37ce9e6e1d99b86a05a9fc
Author: grokys <grokys@gmail.com>
Date:   Tue Feb 4 18:15:18 2014 +0100

    Gangnam Style

commit 18bbb2c41e3bd03e57d55c57413b34fc43a9ac70
Author: Steven Kirk <grokys@gmail.com>
Date:   Wed Mar 12 23:17:39 2014 +0100

    WIP

    Not sure where I am - went away for 2 weeks and forgot what I was doing.
    oops

到四月份,我已经有几个非常基本的控件工作了(Button 和 CheckBox):

commit c1a09314456ebd7dbe604f9d8709d4a74277c27d
Author: Steven Kirk <grokys@gmail.com>
Date:   Sun Apr 6 01:09:28 2014 +0200

    Added (VERY!) basic checkbox

到2014年11月,我已经有一个非常基础的应用程序,包括诸如基础TabControl、TextBox、TreeView,甚至是开发工具:

跨平台转移

在最初的提交近一年后,我开始努力让Perspex跨平台。最初的跨平台工作是添加一个Cairo渲染器,作为现有Direct2D渲染器的补充:

commit 7167f26c93b2bffc30143d928523f9fe10478717
Author: Steven Kirk <steven.kirk@tricycleinc.com>
Date:   Sun Nov 30 22:14:43 2014 +0100

    Trying to create a cairo renderer.

    Not working. Nothing is drawn...

commit 848f8e7b4bfff7c5bbd400ac73cdb3d4c842f750
Author: Steven Kirk <steven.kirk@tricycleinc.com>
Date:   Sun Nov 30 22:38:17 2014 +0100

    Now at least draws something.

    Need to implement a fair bit more before it makes sense though!

commit b9609d3621fd64bb1fee69f83fc800feacc6a7a5
Author: Steven Kirk <steven.kirk@tricycleinc.com>
Date:   Sun Nov 30 22:56:36 2014 +0100

    Make transforms work.

    Now draws something resembling the proper content

首次贡献!

然后在2014年11月30日,一个里程碑!我们迎来了第一次外部贡献,来自 @SuperJMN:如果你想知道谁让你可以在Avalonia中设置窗口标题,那就是José!

commit 5f1b9617bb5d5ae4f2426097ff5c4917de257037
Author: SuperJMN <superjmn@outlook.com>
Date:   Sun Nov 30 23:36:57 2014 +0100

    Title property for Window

不久之后,@keichinger 也加入进来帮助编写文档(这是我们至今都在努力的事情!)

commit 7aec2d141cabecd5f590aee3660be324312de0f1
Author: Kai Eichinger <cH40z-Lord@outlook.com>
Date:   Thu Dec 11 15:48:45 2014 +0100

    Added syntax highlighting to intro.md

同一天,还有另一个外部贡献者@ncarrillo加入:

commit a6476cb7ec69f7a220de0bd33ed989ec3b906806
Author: Nelson Carrillo <ncarrillo@harbortouch.com>
Date:   Thu Dec 11 09:59:50 2014 -0500

    - Added Ctrl+A to select all text in the TextBox
    - Made the TextBox lose its selection when focus is lost

@ncarrillo在这些第一次提交后的几个月里非常活跃,很快又加入了@robertofon 。同时@SuperJMN安静地准备着一些大动作...

XAML支持

信不信由你,到目前为止,Perspex还没有XAML支持。所有UI都在C#代码中定义 (这似乎是最近重新流行起来的趋势),而且当时我对WPF XAML的冗长感到不满(说实话,现在我仍然不是很喜欢,但那是后话)。

然而,XAML支持一直是一个受欢迎的功能,因此@SuperJMN悄悄地开发了OmnXAML库,并在2015年8月24日将XAML支持加入Avalonia:

commit fc3cc76bd60e897d4aaf1e66ffcdfce7517603b1
Author: José Manuel Nieto Sánchez <superjmn@outlook.com>
Date:   Mon Aug 24 02:20:37 2015 +0200

    Added XAML feature

此时,Perspex仍然相当基础,但事情开始成型,几个控件已经实现,甚至还有基本的动画和弹出窗口,尽管从跨平台支持的工作来看,0.0.1-alpha版本似乎仍然仅限于Windows:

熟悉的面孔

0.0.1-alpha版本虽然相对基础,但足以引起一些维护者的兴趣,他们一直陪伴到今天!

值得尊敬的 @kekekeks 在三天后出现,虽然以一个不起眼的提交开始,但随后带来了许多更有意义的提交:

commit ef7d86f04e7c634579756672efb76691fdc12185
Author: Nikita Tsukanov <keks9n@gmail.com>
Date:   Mon Aug 31 22:33:58 2015 +0300

    Broken link

    https://github.com/grokys/Perspex/blob/master/Docs/architecture.md - 404
    https://github.com/grokys/Perspex/blob/master/docs/architecture.md - OK

一周后,他已经被StyleCop激怒了:

commit 7f72c7763b227a3225f470bc84a4935fc3175791
Author: Nikita Tsukanov <keks9n@gmail.com>
Date:   Mon Sep 7 23:03:00 2015 +0300

    Implemented cursors. Ceterum censeo StyleCopum esse delendum

几周后,@danwalmsley 带来了他的第一个TextBox修复:

commit 8309adf6dac298b5c78b754f064bfdeb40e47933
Author: Dan Walmsley <dan@walms.co.uk>
Date:   Fri Sep 25 00:35:11 2015 +0100

    Implemented caret inverting background colour

随后加入了一些其他熟悉的名字,在那些早期对项目的成功贡献颇大:

commit b13b870741aefe63f3f7c7c83ae50cd256209be4
Author: Wiesław Šoltés <wieslaw.soltes@gmail.com>
Date:   Wed Nov 4 00:48:03 2015 +0100

    Added RelativeRectTypeConverter

commit 74cea9595637c6351b2f633d3be782a7b7c681ec
Author: Jeremy Koritzinsky <jkoritzinsky@live.com>
Date:   Mon Feb 22 18:48:11 2016 -0600

    Can now bind to a non-IList/Array indexer (with any parameter type convertible via TypeUtilities)

设计器支持

几乎在他第一次提交之后,@kekekeks开始着手实现设计器(或更准确地说,是预览器):

commit abf60b5a5ce84c905c2e2d8106d7a88de11ce8f7
Author: Nikita Tsukanov <keks9n@gmail.com>
Date:   Wed Sep 2 12:29:50 2015 +0300

    Added EmbeddedWindowImpl for embedding and designer support

commit eee5da30a0214869b2f99f7bcd29b0e0510084e8
Author: Nikita Tsukanov <keks9n@gmail.com>
Date:   Thu Sep 3 00:12:12 2015 +0300

    Designer: Initial out-of-process renderer implementation

仅仅一天后,@Seeker1437 开始将该支持添加到 Visual Studio扩展中!

commit ecd6efe766324ecbb44d23b7d15837cf3001a14a
Author: Darnell Williams <williams.darnell56@yahoo.com>
Date:   Thu Sep 3 21:26:15 2015 -0400

    Add Designer Support Part 1

commit fdcb454b27f95951ac5afa575df831f14aad4659
Author: Darnell Williams <williams.darnell56@yahoo.com>
Date:   Fri Sep 4 07:47:46 2015 -0400

    Small source code corrections

commit 0d0e70312bb2829b08852276b0a9661d92ef7f18
Author: Darnell Williams <williams.darnell56@yahoo.com>
Date:   Sun Sep 6 02:59:50 2015 -0400

    Add Designer Support Part 2

    * Add build start/stop detection
    * Removed unused references
    * adjusted injection code to keep trying if not able to find the needed
    entry point (rare)
    * Now displays designer properly
    * Now can detect output path (Improvable, current will not detect change
    without reopening designer)
    * Now detects when designer is closed
    * better namespace detection with fallback

回头看看这一点相当有趣,看到那时事情开展得如此之快!

移动支持的实验

在添加设计器支持后不久,@kekekeks开始为Android和iOS添加支持!

commit abd7edd6b04264048977a636db71e38593fd8169
Author: Nikita Tsukanov <keks9n@gmail.com>
Date:   Mon Nov 9 03:05:55 2015 +0300

    Android support for skia

commit 0870aad3d79b26222681a9ec3a0c4ef7f8dd605f
Author: Nikita Tsukanov <keks9n@gmail.com>
Date:   Tue Nov 10 16:30:46 2015 +0300

    Build Skia.Android on CI

commit d6745e88c1d90d98c84425c025107a5fffda43a4
Author: Nikita Tsukanov <keks9n@gmail.com>
Date:   Sun Nov 15 04:46:44 2015 +0300

    Added iOS support for skia backend

commit 043e1d5eaf0648d04f69348ea931c83d3d6ceebc
Author: Nikita Tsukanov <keks9n@gmail.com>
Date:   Thu Nov 26 02:49:21 2015 +0300

    Added nuget package for iOS

大改名

很明显,这个项目不再只是我为了解决一个小问题而做的个人项目。Avalonia有可能成为一个可行的UI框架。因此,以商品名(Perspex)为名的潜在法律问题浮出水面,经过长时间的考虑,我们决定将Perspex重命名为Avalonia,借用它所替换的中止项目的名字。

commit 5be41985c32c1270b41aa531e8b2a96ddf6792cb
Author: Steven Kirk <grokys@gmail.com>
Date:   Wed May 11 23:36:54 2016 +0200

    Renamed Perspex -> Avalonia

0.4.0版本

Avalonia 0.4.0于2016年8月发布——在Perspex 0.0.1-alpha一年后。

commit e71e6714f0be6fae9136af4def747bce58af41a6 (tag: 0.4.0)
Author: Steven Kirk <grokys@gmail.com>
Date:   Sat Aug 6 10:58:10 2016 +0200

    Added link to VS extension

我认为这是Avalonia的第一个“真正”版本:部分因为它是第一个使用Avalonia这个名字的版本,但更重要的是,可以看到现代Avalonia的基础已经形成,尽管还有很多工作要做。我记得我们计划在0.4.0一年后发布1.0版本,但这从未实现。事实上,决定何时达到1.0是如此困难,以至于我们在2023年从0.10直接跳到了11.0!

这个版本甚至有一个视频(由@kekekeks制作,伴随着轻松的音乐)!

https://www.youtube.com/watch?v=c_AB_XSILp0&t=28s

关于 Perspex Avalonia历史的第一部分,我想这是一个很好的结束时机。衷心感谢数百位帮助我们走过这一段路的贡献者,祝愿接下来的十年更加辉煌!🍻

回顾Avalonia的10年历程,很明显,这一里程碑对于社区来说是巨大的成就。Avalonia从最初的实验演变成为一个领先的跨平台框架,被一些大型和著名的组织采用。这个周年纪念不仅是对技术成就的庆祝,也是对开放协作力量的证明,对解决复杂挑战的动力和对持续改进的坚定承诺的体现。在这篇文章中,我们将深入探讨项目的早期历史。

最初的提交

https://github.com/AvaloniaUI/Avalonia/commit/cd2b7530f5e3e0cea2c45c39bdc9a433149c2200

commit c8df546e73f90951f5117f1eeb168a33b207652b
Author: grokys <grokys@gmail.com>
Date:   Wed Dec 11 22:43:22 2013 +0100

当时,Avalonia被称为Perspex,而Perspex源于另一个项目,而这个项目相当令人困惑地被称为 Avalonia

最初的Avalonia是我在尝试重现作为开源项目的WPF时的一次尝试。答案是:“非常困难”,但更重要的是,在经过几个月的断断续续的工作后,我发现这并不有趣。我希望在我看到问题的地方进行改进,而不是盲目地重现WPF的所有问题!

在开始Perspex之前,我还记得在心里想着“但这个世界是否需要另一个不兼容的XAML UI框架?”(那是WPF/ Silverlight/ Metro的时代)。我的答案是“不需要,但是谁在乎呢?反正无人关注。”于是我开始了Perspex的工作,只是为了看看自己能走多远。我从未预料到10年前开始的东西会发展成今天的Avalonia!

最初的提交仅支持Windows,尽管明显有将Perspex做成跨平台的意图,因为所有的Windows特定代码都被放在 Perspex.Windows中。它甚至还有 5个单元测试

运行 TestApplication 展示了在这10年中我们取得的长足进步:

一个简单的“Hello World!”甚至不能正确处理窗口尺寸调整!不过,这在一个半小时后被很快修复了:

https://github.com/AvaloniaUI/Avalonia/commit/c8df546e73f90951f5117f1eeb168a33b207652b

commit c8df546e73f90951f5117f1eeb168a33b207652b
Author: grokys <grokys@gmail.com>
Date:   Wed Dec 11 22:43:22 2013 +0100

    Re-measure/render when window resized

值得注意的是,最初的提交中已经存在了强类型的 DependencyProperty 的替代品,现在我们称之为 AvaloniaProperty (当时称为 PerspexProperty)。

走向一个功能尚算完整的应用

接下来的几个月,Perspex的工作断断续续,主要从实现类CSS样式系统开始。我似乎很享受这些提交信息

commit 581a037cb8b87561003184012f1d48cf732f8fe9
Author: grokys <grokys@gmail.com>
Date:   Tue Feb 4 01:17:42 2014 +0100

    Style council.

commit ae79a51d727f4df07b5e83a03ddcca47478195ff
Author: grokys <grokys@gmail.com>
Date:   Tue Feb 4 02:12:08 2014 +0100

    Styley style.

commit ac659701b8811c6d2e75e6bbb8c40b26a28669e7
Author: grokys <grokys@gmail.com>
Date:   Tue Feb 4 18:00:19 2014 +0100

    Style away the hours.

commit 63f674d897ba4e9b7f37ce9e6e1d99b86a05a9fc
Author: grokys <grokys@gmail.com>
Date:   Tue Feb 4 18:15:18 2014 +0100

    Gangnam Style

commit 18bbb2c41e3bd03e57d55c57413b34fc43a9ac70
Author: Steven Kirk <grokys@gmail.com>
Date:   Wed Mar 12 23:17:39 2014 +0100

    WIP

    Not sure where I am - went away for 2 weeks and forgot what I was doing.
    oops

到四月份,我已经有几个非常基本的控件工作了(Button 和 CheckBox):

commit c1a09314456ebd7dbe604f9d8709d4a74277c27d
Author: Steven Kirk <grokys@gmail.com>
Date:   Sun Apr 6 01:09:28 2014 +0200

    Added (VERY!) basic checkbox

到2014年11月,我已经有一个非常基础的应用程序,包括诸如基础TabControl、TextBox、TreeView,甚至是开发工具:

跨平台转移

在最初的提交近一年后,我开始努力让Perspex跨平台。最初的跨平台工作是添加一个Cairo渲染器,作为现有Direct2D渲染器的补充:

commit 7167f26c93b2bffc30143d928523f9fe10478717
Author: Steven Kirk <steven.kirk@tricycleinc.com>
Date:   Sun Nov 30 22:14:43 2014 +0100

    Trying to create a cairo renderer.

    Not working. Nothing is drawn...

commit 848f8e7b4bfff7c5bbd400ac73cdb3d4c842f750
Author: Steven Kirk <steven.kirk@tricycleinc.com>
Date:   Sun Nov 30 22:38:17 2014 +0100

    Now at least draws something.

    Need to implement a fair bit more before it makes sense though!

commit b9609d3621fd64bb1fee69f83fc800feacc6a7a5
Author: Steven Kirk <steven.kirk@tricycleinc.com>
Date:   Sun Nov 30 22:56:36 2014 +0100

    Make transforms work.

    Now draws something resembling the proper content

首次贡献!

然后在2014年11月30日,一个里程碑!我们迎来了第一次外部贡献,来自 @SuperJMN:如果你想知道谁让你可以在Avalonia中设置窗口标题,那就是José!

commit 5f1b9617bb5d5ae4f2426097ff5c4917de257037
Author: SuperJMN <superjmn@outlook.com>
Date:   Sun Nov 30 23:36:57 2014 +0100

    Title property for Window

不久之后,@keichinger 也加入进来帮助编写文档(这是我们至今都在努力的事情!)

commit 7aec2d141cabecd5f590aee3660be324312de0f1
Author: Kai Eichinger <cH40z-Lord@outlook.com>
Date:   Thu Dec 11 15:48:45 2014 +0100

    Added syntax highlighting to intro.md

同一天,还有另一个外部贡献者@ncarrillo加入:

commit a6476cb7ec69f7a220de0bd33ed989ec3b906806
Author: Nelson Carrillo <ncarrillo@harbortouch.com>
Date:   Thu Dec 11 09:59:50 2014 -0500

    - Added Ctrl+A to select all text in the TextBox
    - Made the TextBox lose its selection when focus is lost

@ncarrillo在这些第一次提交后的几个月里非常活跃,很快又加入了@robertofon 。同时@SuperJMN安静地准备着一些大动作...

XAML支持

信不信由你,到目前为止,Perspex还没有XAML支持。所有UI都在C#代码中定义 (这似乎是最近重新流行起来的趋势),而且当时我对WPF XAML的冗长感到不满(说实话,现在我仍然不是很喜欢,但那是后话)。

然而,XAML支持一直是一个受欢迎的功能,因此@SuperJMN悄悄地开发了OmnXAML库,并在2015年8月24日将XAML支持加入Avalonia:

commit fc3cc76bd60e897d4aaf1e66ffcdfce7517603b1
Author: José Manuel Nieto Sánchez <superjmn@outlook.com>
Date:   Mon Aug 24 02:20:37 2015 +0200

    Added XAML feature

此时,Perspex仍然相当基础,但事情开始成型,几个控件已经实现,甚至还有基本的动画和弹出窗口,尽管从跨平台支持的工作来看,0.0.1-alpha版本似乎仍然仅限于Windows:

熟悉的面孔

0.0.1-alpha版本虽然相对基础,但足以引起一些维护者的兴趣,他们一直陪伴到今天!

值得尊敬的 @kekekeks 在三天后出现,虽然以一个不起眼的提交开始,但随后带来了许多更有意义的提交:

commit ef7d86f04e7c634579756672efb76691fdc12185
Author: Nikita Tsukanov <keks9n@gmail.com>
Date:   Mon Aug 31 22:33:58 2015 +0300

    Broken link

    https://github.com/grokys/Perspex/blob/master/Docs/architecture.md - 404
    https://github.com/grokys/Perspex/blob/master/docs/architecture.md - OK

一周后,他已经被StyleCop激怒了:

commit 7f72c7763b227a3225f470bc84a4935fc3175791
Author: Nikita Tsukanov <keks9n@gmail.com>
Date:   Mon Sep 7 23:03:00 2015 +0300

    Implemented cursors. Ceterum censeo StyleCopum esse delendum

几周后,@danwalmsley 带来了他的第一个TextBox修复:

commit 8309adf6dac298b5c78b754f064bfdeb40e47933
Author: Dan Walmsley <dan@walms.co.uk>
Date:   Fri Sep 25 00:35:11 2015 +0100

    Implemented caret inverting background colour

随后加入了一些其他熟悉的名字,在那些早期对项目的成功贡献颇大:

commit b13b870741aefe63f3f7c7c83ae50cd256209be4
Author: Wiesław Šoltés <wieslaw.soltes@gmail.com>
Date:   Wed Nov 4 00:48:03 2015 +0100

    Added RelativeRectTypeConverter

commit 74cea9595637c6351b2f633d3be782a7b7c681ec
Author: Jeremy Koritzinsky <jkoritzinsky@live.com>
Date:   Mon Feb 22 18:48:11 2016 -0600

    Can now bind to a non-IList/Array indexer (with any parameter type convertible via TypeUtilities)

设计器支持

几乎在他第一次提交之后,@kekekeks开始着手实现设计器(或更准确地说,是预览器):

commit abf60b5a5ce84c905c2e2d8106d7a88de11ce8f7
Author: Nikita Tsukanov <keks9n@gmail.com>
Date:   Wed Sep 2 12:29:50 2015 +0300

    Added EmbeddedWindowImpl for embedding and designer support

commit eee5da30a0214869b2f99f7bcd29b0e0510084e8
Author: Nikita Tsukanov <keks9n@gmail.com>
Date:   Thu Sep 3 00:12:12 2015 +0300

    Designer: Initial out-of-process renderer implementation

仅仅一天后,@Seeker1437 开始将该支持添加到 Visual Studio扩展中!

commit ecd6efe766324ecbb44d23b7d15837cf3001a14a
Author: Darnell Williams <williams.darnell56@yahoo.com>
Date:   Thu Sep 3 21:26:15 2015 -0400

    Add Designer Support Part 1

commit fdcb454b27f95951ac5afa575df831f14aad4659
Author: Darnell Williams <williams.darnell56@yahoo.com>
Date:   Fri Sep 4 07:47:46 2015 -0400

    Small source code corrections

commit 0d0e70312bb2829b08852276b0a9661d92ef7f18
Author: Darnell Williams <williams.darnell56@yahoo.com>
Date:   Sun Sep 6 02:59:50 2015 -0400

    Add Designer Support Part 2

    * Add build start/stop detection
    * Removed unused references
    * adjusted injection code to keep trying if not able to find the needed
    entry point (rare)
    * Now displays designer properly
    * Now can detect output path (Improvable, current will not detect change
    without reopening designer)
    * Now detects when designer is closed
    * better namespace detection with fallback

回头看看这一点相当有趣,看到那时事情开展得如此之快!

移动支持的实验

在添加设计器支持后不久,@kekekeks开始为Android和iOS添加支持!

commit abd7edd6b04264048977a636db71e38593fd8169
Author: Nikita Tsukanov <keks9n@gmail.com>
Date:   Mon Nov 9 03:05:55 2015 +0300

    Android support for skia

commit 0870aad3d79b26222681a9ec3a0c4ef7f8dd605f
Author: Nikita Tsukanov <keks9n@gmail.com>
Date:   Tue Nov 10 16:30:46 2015 +0300

    Build Skia.Android on CI

commit d6745e88c1d90d98c84425c025107a5fffda43a4
Author: Nikita Tsukanov <keks9n@gmail.com>
Date:   Sun Nov 15 04:46:44 2015 +0300

    Added iOS support for skia backend

commit 043e1d5eaf0648d04f69348ea931c83d3d6ceebc
Author: Nikita Tsukanov <keks9n@gmail.com>
Date:   Thu Nov 26 02:49:21 2015 +0300

    Added nuget package for iOS

大改名

很明显,这个项目不再只是我为了解决一个小问题而做的个人项目。Avalonia有可能成为一个可行的UI框架。因此,以商品名(Perspex)为名的潜在法律问题浮出水面,经过长时间的考虑,我们决定将Perspex重命名为Avalonia,借用它所替换的中止项目的名字。

commit 5be41985c32c1270b41aa531e8b2a96ddf6792cb
Author: Steven Kirk <grokys@gmail.com>
Date:   Wed May 11 23:36:54 2016 +0200

    Renamed Perspex -> Avalonia

0.4.0版本

Avalonia 0.4.0于2016年8月发布——在Perspex 0.0.1-alpha一年后。

commit e71e6714f0be6fae9136af4def747bce58af41a6 (tag: 0.4.0)
Author: Steven Kirk <grokys@gmail.com>
Date:   Sat Aug 6 10:58:10 2016 +0200

    Added link to VS extension

我认为这是Avalonia的第一个“真正”版本:部分因为它是第一个使用Avalonia这个名字的版本,但更重要的是,可以看到现代Avalonia的基础已经形成,尽管还有很多工作要做。我记得我们计划在0.4.0一年后发布1.0版本,但这从未实现。事实上,决定何时达到1.0是如此困难,以至于我们在2023年从0.10直接跳到了11.0!

这个版本甚至有一个视频(由@kekekeks制作,伴随着轻松的音乐)!

https://www.youtube.com/watch?v=c_AB_XSILp0&t=28s

关于 Perspex Avalonia历史的第一部分,我想这是一个很好的结束时机。衷心感谢数百位帮助我们走过这一段路的贡献者,祝愿接下来的十年更加辉煌!🍻

回顾Avalonia的10年历程,很明显,这一里程碑对于社区来说是巨大的成就。Avalonia从最初的实验演变成为一个领先的跨平台框架,被一些大型和著名的组织采用。这个周年纪念不仅是对技术成就的庆祝,也是对开放协作力量的证明,对解决复杂挑战的动力和对持续改进的坚定承诺的体现。在这篇文章中,我们将深入探讨项目的早期历史。

最初的提交

https://github.com/AvaloniaUI/Avalonia/commit/cd2b7530f5e3e0cea2c45c39bdc9a433149c2200

commit c8df546e73f90951f5117f1eeb168a33b207652b
Author: grokys <grokys@gmail.com>
Date:   Wed Dec 11 22:43:22 2013 +0100

当时,Avalonia被称为Perspex,而Perspex源于另一个项目,而这个项目相当令人困惑地被称为 Avalonia

最初的Avalonia是我在尝试重现作为开源项目的WPF时的一次尝试。答案是:“非常困难”,但更重要的是,在经过几个月的断断续续的工作后,我发现这并不有趣。我希望在我看到问题的地方进行改进,而不是盲目地重现WPF的所有问题!

在开始Perspex之前,我还记得在心里想着“但这个世界是否需要另一个不兼容的XAML UI框架?”(那是WPF/ Silverlight/ Metro的时代)。我的答案是“不需要,但是谁在乎呢?反正无人关注。”于是我开始了Perspex的工作,只是为了看看自己能走多远。我从未预料到10年前开始的东西会发展成今天的Avalonia!

最初的提交仅支持Windows,尽管明显有将Perspex做成跨平台的意图,因为所有的Windows特定代码都被放在 Perspex.Windows中。它甚至还有 5个单元测试

运行 TestApplication 展示了在这10年中我们取得的长足进步:

一个简单的“Hello World!”甚至不能正确处理窗口尺寸调整!不过,这在一个半小时后被很快修复了:

https://github.com/AvaloniaUI/Avalonia/commit/c8df546e73f90951f5117f1eeb168a33b207652b

commit c8df546e73f90951f5117f1eeb168a33b207652b
Author: grokys <grokys@gmail.com>
Date:   Wed Dec 11 22:43:22 2013 +0100

    Re-measure/render when window resized

值得注意的是,最初的提交中已经存在了强类型的 DependencyProperty 的替代品,现在我们称之为 AvaloniaProperty (当时称为 PerspexProperty)。

走向一个功能尚算完整的应用

接下来的几个月,Perspex的工作断断续续,主要从实现类CSS样式系统开始。我似乎很享受这些提交信息

commit 581a037cb8b87561003184012f1d48cf732f8fe9
Author: grokys <grokys@gmail.com>
Date:   Tue Feb 4 01:17:42 2014 +0100

    Style council.

commit ae79a51d727f4df07b5e83a03ddcca47478195ff
Author: grokys <grokys@gmail.com>
Date:   Tue Feb 4 02:12:08 2014 +0100

    Styley style.

commit ac659701b8811c6d2e75e6bbb8c40b26a28669e7
Author: grokys <grokys@gmail.com>
Date:   Tue Feb 4 18:00:19 2014 +0100

    Style away the hours.

commit 63f674d897ba4e9b7f37ce9e6e1d99b86a05a9fc
Author: grokys <grokys@gmail.com>
Date:   Tue Feb 4 18:15:18 2014 +0100

    Gangnam Style

commit 18bbb2c41e3bd03e57d55c57413b34fc43a9ac70
Author: Steven Kirk <grokys@gmail.com>
Date:   Wed Mar 12 23:17:39 2014 +0100

    WIP

    Not sure where I am - went away for 2 weeks and forgot what I was doing.
    oops

到四月份,我已经有几个非常基本的控件工作了(Button 和 CheckBox):

commit c1a09314456ebd7dbe604f9d8709d4a74277c27d
Author: Steven Kirk <grokys@gmail.com>
Date:   Sun Apr 6 01:09:28 2014 +0200

    Added (VERY!) basic checkbox

到2014年11月,我已经有一个非常基础的应用程序,包括诸如基础TabControl、TextBox、TreeView,甚至是开发工具:

跨平台转移

在最初的提交近一年后,我开始努力让Perspex跨平台。最初的跨平台工作是添加一个Cairo渲染器,作为现有Direct2D渲染器的补充:

commit 7167f26c93b2bffc30143d928523f9fe10478717
Author: Steven Kirk <steven.kirk@tricycleinc.com>
Date:   Sun Nov 30 22:14:43 2014 +0100

    Trying to create a cairo renderer.

    Not working. Nothing is drawn...

commit 848f8e7b4bfff7c5bbd400ac73cdb3d4c842f750
Author: Steven Kirk <steven.kirk@tricycleinc.com>
Date:   Sun Nov 30 22:38:17 2014 +0100

    Now at least draws something.

    Need to implement a fair bit more before it makes sense though!

commit b9609d3621fd64bb1fee69f83fc800feacc6a7a5
Author: Steven Kirk <steven.kirk@tricycleinc.com>
Date:   Sun Nov 30 22:56:36 2014 +0100

    Make transforms work.

    Now draws something resembling the proper content

首次贡献!

然后在2014年11月30日,一个里程碑!我们迎来了第一次外部贡献,来自 @SuperJMN:如果你想知道谁让你可以在Avalonia中设置窗口标题,那就是José!

commit 5f1b9617bb5d5ae4f2426097ff5c4917de257037
Author: SuperJMN <superjmn@outlook.com>
Date:   Sun Nov 30 23:36:57 2014 +0100

    Title property for Window

不久之后,@keichinger 也加入进来帮助编写文档(这是我们至今都在努力的事情!)

commit 7aec2d141cabecd5f590aee3660be324312de0f1
Author: Kai Eichinger <cH40z-Lord@outlook.com>
Date:   Thu Dec 11 15:48:45 2014 +0100

    Added syntax highlighting to intro.md

同一天,还有另一个外部贡献者@ncarrillo加入:

commit a6476cb7ec69f7a220de0bd33ed989ec3b906806
Author: Nelson Carrillo <ncarrillo@harbortouch.com>
Date:   Thu Dec 11 09:59:50 2014 -0500

    - Added Ctrl+A to select all text in the TextBox
    - Made the TextBox lose its selection when focus is lost

@ncarrillo在这些第一次提交后的几个月里非常活跃,很快又加入了@robertofon 。同时@SuperJMN安静地准备着一些大动作...

XAML支持

信不信由你,到目前为止,Perspex还没有XAML支持。所有UI都在C#代码中定义 (这似乎是最近重新流行起来的趋势),而且当时我对WPF XAML的冗长感到不满(说实话,现在我仍然不是很喜欢,但那是后话)。

然而,XAML支持一直是一个受欢迎的功能,因此@SuperJMN悄悄地开发了OmnXAML库,并在2015年8月24日将XAML支持加入Avalonia:

commit fc3cc76bd60e897d4aaf1e66ffcdfce7517603b1
Author: José Manuel Nieto Sánchez <superjmn@outlook.com>
Date:   Mon Aug 24 02:20:37 2015 +0200

    Added XAML feature

此时,Perspex仍然相当基础,但事情开始成型,几个控件已经实现,甚至还有基本的动画和弹出窗口,尽管从跨平台支持的工作来看,0.0.1-alpha版本似乎仍然仅限于Windows:

熟悉的面孔

0.0.1-alpha版本虽然相对基础,但足以引起一些维护者的兴趣,他们一直陪伴到今天!

值得尊敬的 @kekekeks 在三天后出现,虽然以一个不起眼的提交开始,但随后带来了许多更有意义的提交:

commit ef7d86f04e7c634579756672efb76691fdc12185
Author: Nikita Tsukanov <keks9n@gmail.com>
Date:   Mon Aug 31 22:33:58 2015 +0300

    Broken link

    https://github.com/grokys/Perspex/blob/master/Docs/architecture.md - 404
    https://github.com/grokys/Perspex/blob/master/docs/architecture.md - OK

一周后,他已经被StyleCop激怒了:

commit 7f72c7763b227a3225f470bc84a4935fc3175791
Author: Nikita Tsukanov <keks9n@gmail.com>
Date:   Mon Sep 7 23:03:00 2015 +0300

    Implemented cursors. Ceterum censeo StyleCopum esse delendum

几周后,@danwalmsley 带来了他的第一个TextBox修复:

commit 8309adf6dac298b5c78b754f064bfdeb40e47933
Author: Dan Walmsley <dan@walms.co.uk>
Date:   Fri Sep 25 00:35:11 2015 +0100

    Implemented caret inverting background colour

随后加入了一些其他熟悉的名字,在那些早期对项目的成功贡献颇大:

commit b13b870741aefe63f3f7c7c83ae50cd256209be4
Author: Wiesław Šoltés <wieslaw.soltes@gmail.com>
Date:   Wed Nov 4 00:48:03 2015 +0100

    Added RelativeRectTypeConverter

commit 74cea9595637c6351b2f633d3be782a7b7c681ec
Author: Jeremy Koritzinsky <jkoritzinsky@live.com>
Date:   Mon Feb 22 18:48:11 2016 -0600

    Can now bind to a non-IList/Array indexer (with any parameter type convertible via TypeUtilities)

设计器支持

几乎在他第一次提交之后,@kekekeks开始着手实现设计器(或更准确地说,是预览器):

commit abf60b5a5ce84c905c2e2d8106d7a88de11ce8f7
Author: Nikita Tsukanov <keks9n@gmail.com>
Date:   Wed Sep 2 12:29:50 2015 +0300

    Added EmbeddedWindowImpl for embedding and designer support

commit eee5da30a0214869b2f99f7bcd29b0e0510084e8
Author: Nikita Tsukanov <keks9n@gmail.com>
Date:   Thu Sep 3 00:12:12 2015 +0300

    Designer: Initial out-of-process renderer implementation

仅仅一天后,@Seeker1437 开始将该支持添加到 Visual Studio扩展中!

commit ecd6efe766324ecbb44d23b7d15837cf3001a14a
Author: Darnell Williams <williams.darnell56@yahoo.com>
Date:   Thu Sep 3 21:26:15 2015 -0400

    Add Designer Support Part 1

commit fdcb454b27f95951ac5afa575df831f14aad4659
Author: Darnell Williams <williams.darnell56@yahoo.com>
Date:   Fri Sep 4 07:47:46 2015 -0400

    Small source code corrections

commit 0d0e70312bb2829b08852276b0a9661d92ef7f18
Author: Darnell Williams <williams.darnell56@yahoo.com>
Date:   Sun Sep 6 02:59:50 2015 -0400

    Add Designer Support Part 2

    * Add build start/stop detection
    * Removed unused references
    * adjusted injection code to keep trying if not able to find the needed
    entry point (rare)
    * Now displays designer properly
    * Now can detect output path (Improvable, current will not detect change
    without reopening designer)
    * Now detects when designer is closed
    * better namespace detection with fallback

回头看看这一点相当有趣,看到那时事情开展得如此之快!

移动支持的实验

在添加设计器支持后不久,@kekekeks开始为Android和iOS添加支持!

commit abd7edd6b04264048977a636db71e38593fd8169
Author: Nikita Tsukanov <keks9n@gmail.com>
Date:   Mon Nov 9 03:05:55 2015 +0300

    Android support for skia

commit 0870aad3d79b26222681a9ec3a0c4ef7f8dd605f
Author: Nikita Tsukanov <keks9n@gmail.com>
Date:   Tue Nov 10 16:30:46 2015 +0300

    Build Skia.Android on CI

commit d6745e88c1d90d98c84425c025107a5fffda43a4
Author: Nikita Tsukanov <keks9n@gmail.com>
Date:   Sun Nov 15 04:46:44 2015 +0300

    Added iOS support for skia backend

commit 043e1d5eaf0648d04f69348ea931c83d3d6ceebc
Author: Nikita Tsukanov <keks9n@gmail.com>
Date:   Thu Nov 26 02:49:21 2015 +0300

    Added nuget package for iOS

大改名

很明显,这个项目不再只是我为了解决一个小问题而做的个人项目。Avalonia有可能成为一个可行的UI框架。因此,以商品名(Perspex)为名的潜在法律问题浮出水面,经过长时间的考虑,我们决定将Perspex重命名为Avalonia,借用它所替换的中止项目的名字。

commit 5be41985c32c1270b41aa531e8b2a96ddf6792cb
Author: Steven Kirk <grokys@gmail.com>
Date:   Wed May 11 23:36:54 2016 +0200

    Renamed Perspex -> Avalonia

0.4.0版本

Avalonia 0.4.0于2016年8月发布——在Perspex 0.0.1-alpha一年后。

commit e71e6714f0be6fae9136af4def747bce58af41a6 (tag: 0.4.0)
Author: Steven Kirk <grokys@gmail.com>
Date:   Sat Aug 6 10:58:10 2016 +0200

    Added link to VS extension

我认为这是Avalonia的第一个“真正”版本:部分因为它是第一个使用Avalonia这个名字的版本,但更重要的是,可以看到现代Avalonia的基础已经形成,尽管还有很多工作要做。我记得我们计划在0.4.0一年后发布1.0版本,但这从未实现。事实上,决定何时达到1.0是如此困难,以至于我们在2023年从0.10直接跳到了11.0!

这个版本甚至有一个视频(由@kekekeks制作,伴随着轻松的音乐)!

https://www.youtube.com/watch?v=c_AB_XSILp0&t=28s

关于 Perspex Avalonia历史的第一部分,我想这是一个很好的结束时机。衷心感谢数百位帮助我们走过这一段路的贡献者,祝愿接下来的十年更加辉煌!🍻

继续阅读

最新精选博客文章