.net core 跨平台UI框架 Avalonia

作为一名后端开发,UI始终是个最头疼的事,写过QT/HTML/VC/ANDROID之类的界面,都没有WPF写起来那么顺畅,所以一直都在想WPF要是能跨平台就好了。没想到,梦想还真的实现了,还是开源的,还跨了所有平台,这就是Avalonia,似乎挺新的,大致看了下,理念和设计都很前卫。

官网:http://www.avaloniaui.net/http://www.avaloniaui.net/

创建跨平台的代码框架:

Running in the Browser

Run in the browser with WebAssembly

It is currently very early days and not ready for production, however if you want to test this exciting new feature please take the following steps.

  • 1.

    Install wasm-tools workload tools. See dotnet documentation.

  • 2.

    Install or update the dotnet templates to the latest version (0.10.11 or above).

1

dotnet new -i avalonia.templates

Copied!

  • 1.

    Create a new directory for the project.

1

mkdir WebTest

2

cd WebTest

Copied!

  • 1.

    Generate a new project that supports running in the browser.

1

dotnet new avalonia.xplat

首先看下代码结构:

.net core 跨平台UI框架 Avalonia_第1张图片

 和WPF几乎一致,在MainView.axaml编写即可,只不过有一个很大的差异,就是由于是跨平台的,所以有单窗口和多窗口的概念。由于设计的问题,如果要支持web的话,是不能多窗口的,意味着web只能在一个窗口上加载,这确实是个很头痛的问题,和正常的web设计思路很不一样。倒是可以通过远端拉取xaml来动态加载,来触发不同的区域渲染,例如:

using Avalonia.Controls;
using Avalonia.Markup.Xaml;

namespace test.Views
{
    public partial class MainView : UserControl
    {
        public MainView()
        {
            InitializeComponent();
            var xaml =
       @"
";
            var target = AvaloniaRuntimeXamlLoader.Parse(xaml);
            g1.Children.Add(target);
        }
    }
}

虽然可以在场景下,按需加载,但avalonia设计有个很头痛的问题是,我看他底层用的是自己的渲染器在web上渲染,并非是去转换为html/css代码,也就导致每个窗口都需要他的引擎加载,从而在设计上,很难去进行多窗口的跳转。如果直接按windows的方法去new Window()显示,在桌面上是没问题的,在web下会直接显示不支持该方法。这也可能是目前写的web还处在测试阶段,可能有一些问题还没解决。当然,这样的设计按道理来说,会获得与客户端几乎一致的体验,以及超乎常理的稳定性。

还有个比较麻烦的问题,就是对中文的支持不太友好,主要是字体的问题,目前web中文暂时没找到解决方案,可能需要修改源码,比较头痛。涉及中文项目开发慎用

总体来说,这还是一个很棒的框架,特别是如果本身熟悉WPF,那就几乎不需要去学习。移动端还没有来得及试试,后面如果有需要会去尝试,相信其发展会越来越健壮

你可能感兴趣的:(C#.NET,.netcore,ui)