"xaml+cs"桌面客户端跨平台初体验

"Xaml+C#"桌面客户端跨平台初体验

前言

??随着 .Net 5的到来,微软在 .Net 跨平台路上又开始了一个更高的起点。回顾.Net Core近几年的成果,可谓是让.Net重生了一次.

??Asp .Net Core跨平台解决了Windows服务器昂贵的费用和不能长时间待机的问题,让Asp程序能够跑在Linux甚至Mac上。从博客园里.Net分类可以看到,每天都可以涌现大批Asp .Net Core的技术文章,越来越多的开发者或者公司开始尝试这个船新的跨平台框架。

??然鹅,Asp的跨平台是能够使用html作为UI,C#作为后台代码完成的,html本来就是原生支持跨平台的语言。如果要到达在客户端方面的跨平台,仍需要走很长一段路。

??早些年的时候。微软使用钞能力收购了移动客户端跨平台开发的大佬Mono,并组建了新的Xamarin,一次开发就可以生成Android,iOS,UWP平台的App,但也仅仅停留在移动客户端跨平台。同样在民间一些大佬的努力下,也创造出了很多PC跨平台的轮子,比如:Electron.Net,GTK#,Qt#等等,这些框架都是使用Html或者Mono平台的内容达到UI跨平台的,而今天我则要推荐一款新的跨平台方案AvaloniaUI

准备

  • 一个Linux的机器

    ??这里推荐使用windows 10下的linux子系统,可以快速的在windows上操作linux子系统的文件目录,用来快速上传编译的程序到linux。详细操作可以看这篇文章启用Windows10的Linux子系统并安装图形界面

    ??当然使用实体机,或者服务器都可以。总之最终目的就是有一个可以连接带图形化界面的Linux系统。

  • 安装.Net Core Runtime

    ??微软官方给出了在Ubutnu安装.Net Core的方法,这里我以Ubuntu为例,其他发行版本使用对应的包管理命令

1.注册 Microsoft 密钥和源

wget https://packages.microsoft.com/config/ubuntu/19.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb

2.安装.Net Core 3.1 Runtmime

sudo apt-get update
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install dotnet-runtime-3.1

????更多详情可参考Microsoft Docs :Ubuntu 19.04 包管理器 - 安装 .NET Core

  • 安装VS拓展

    如果VS拓展下载太慢,可以使用下面的网盘链接下载。

链接: https://pan.baidu.com/s/1sYnpC37IcH2VKQKjmqBALw 提取码: wyqn

  • WPF/UWP的经验
  1. Xaml的语法
  2. C#
  3. 最好了解MVVM模式或者ReactiveUI

Code

  • 创建一个AvaloniaUI的项目

了解WPF/UWP通知模式的童鞋可以使用MVVM

  • 项目结构

和WPF/UWP很相似的结构,但是不同的是Program.cs被重写了

class Program {
        // Initialization code. Don‘t use any Avalonia, third-party APIs or any
        // SynchronizationContext-reliant code before AppMain is called: things aren‘t initialized
        // yet and stuff might break.
        public static void Main(string[] args) => BuildAvaloniaApp()
            .StartWithClassicDesktopLifetime(args);

        // Avalonia configuration, don‘t remove; also used by visual designer.
        public static AppBuilder BuildAvaloniaApp()
            => AppBuilder.Configure<App>()
                .UsePlatformDetect()
                .LogToDebug()
                .UseReactiveUI();
    }
  • MainWindow.Xaml

可以说和WPF/Xaml大致一模一样了,但是体验不太好地就是在Xaml标签页的智能提示和显示内容体验,以及右侧的实时渲染窗口是一帧一帧地刷新整个页面。

  • ViewModel

Avalonia UI使用地是ReactiveUI来做的界面绑定和响应。和以往使用MVVMLight不同,绑定命令不用RelayCommand,而是直接在xaml绑定一个后台的方法名。

  • 发布

    编码完成在windows上测试通过之后,就可以把程序打包发到其他平台上测试了。这里以Linux为例:

    Alt+B-->选择发布

根据目标平台选择配置保存。

点击发布,稍等片刻。。。。。。

  • 跨平台运行

    以linux为例:

  1. 将Publish的文件夹上传到Linux上
  2. 找到对应的程序名(没有任何后缀),更改权限为”允许此文件作为程序运行“

  3. 双击运行,即可看到和Windows上一模一样的效果。

问题

由于AvaloniaUI不是微软官方出品,而是民间团队开发,且目前仍处于预览。我罗列一些自己遇到问题时的解决方案

1.尝试Nuget把AvaloniaUI的包更新到最新

2.保证开发的.netcore配置比运行环境的.net core版本低

3.*字体渲染问题

这个问题是我遇到的最严重的问题,直接导致程序都不能渲染出来。如果有遇到这个问题的同学,可以首先在Program.cs下的Main函数里面加两行代码:

Console.WriteLine(SKTypeface.Default.FamilyName);
Console.WriteLine(SKTypeface.FromFamilyName("Sans").FamilyName);

然后在linux里使用控制台来运行程序,定位到程序目录,更改程序权限为可执行程序

chmod -x 程序名

运行程序

./程序名

如果出现权限不足的可以使用如下

chmod 777 程序名

如果运行程序后,控制台打印了NullRefrence的错误,那就是缺少默认字体。估计是AvaloniaUI的团队设置了程序的默认字体”Sans“。

只需要替换软件默认字体就可以了,这里我使用微软雅黑

<Application
    x:Class="AvaloniaTest.App"
    xmlns="https://github.com/avaloniaui"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:AvaloniaTest">
    <Application.DataTemplates>
        <local:ViewLocator />
    </Application.DataTemplates>
    <Application.Resources>
        <FontFamily x:Key="yh">微软雅黑</FontFamily>
    </Application.Resources>
    <Application.Styles>
        <StyleInclude Source="avares://Avalonia.Themes.Default/DefaultTheme.xaml" />
        <StyleInclude Source="avares://Avalonia.Themes.Default/Accents/BaseLight.xaml" />
        <Style Selector="Window">
            <Setter Property="FontFamily" Value="{StaticResource yh}" />
        </Style>
    </Application.Styles>
</Application>

并且需要在linux安装微软雅黑的字体

sudo apt-get install ttf-mscorefonts-installer

博客园之前也有一位大佬体验AvaloniaUI时候遇到字体的问题,可是他的树莓派是可以渲染出窗体只是没有文字,但是我测试了好几个发行版本都是窗体都不渲染。大家可以参考一下他的文章树莓派 Raspberry Pi 4,.net core 3.0 ,Avalonia UI 开发

运行效果

  • 我尝试使用Face++的 API接口,测试写了一个有网络请求的抠图程序

Windows:

Linux:

其他

贴出一些参考网站给大家

【文章为大头BigHead原创,转载请注明出处】

原文地址:https://www.cnblogs.com/Big-Head/p/12614118.html

时间: 2024-11-06 16:33:35

"xaml+cs"桌面客户端跨平台初体验的相关文章

.NET跨平台初体验

我的个人观点: 我觉得C#是最优美,最万能的编程开发语言,这种观点一抛出或者会引发不少程序员的口水战,当然这只是我个人的观点,没有必要去改变影响其他人的观点,其他人也没必要反驳我,我的这个个人观点只是代表了我对这种C#的喜爱,由始至终! 为什么说C#是最万能的语言,因为我觉得它是至今为止好多平台,好多方向都能用它开发,就拿我自己亲身接触过的来说,C#能XMargin Mono开发三大主流移动平台IOS.Android.WP就更不用说了,如果谈到Unity更是推动了C#的发展,如果不是Unity,

asp net core 跨平台初体验

标: 在 ubuntu 16.04 上部署一个 asp.net core 站点,打开网站后显示一段文字. 安装 net core 运行环境:ubuntu 16.04 LTS 1.添加 apt 源 依次执行三条命令 sudo sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/dotnet-release/ xenial main" > /etc/apt/sources.list.d/dotne

Atitit 全屏模式的cs桌面客户端软件gui h5解决方案 Kiosk模式

1.1. Kiosk Software广泛用于公共电脑或者嵌入系统,最常用的就是ATM机.自动服务机之类的系统了.,1 1.2. Firefox的常用启动参数: (使用插件可以1 2. R-kiosk 0.9.0.1-signed.1-signed  2 2.1. Chrome 启动参数 (这个好用)2 1.1. Kiosk Software广泛用于公共电脑或者嵌入系统,最常用的就是ATM机.自动服务机之类的系统了., 其实他们很多都只是一个浏览器,虽然用Alt+Tab组合键就可以随意切换,但是

互联网江湖,桌面客户端框架技术比武大会

By 技术怪咖 欧阳森林 导读:在互联网时代,如何将一个好的idea快速的转化为产品,如何在原有产品中增加新的特性,是产品能够快速的推向市场.快速占领的关键.因此,作为客户端的架构选型,面临哪几方面的需求?资深前端工程师欧阳森林针对其专业领域的经验,有着自己独到的见解. 前言 自从互联网江湖上出现了一部叫做"云"的秘籍,大大小小的门派,纷纷对外宣称自己掌握了"云"的核心,各种"云"应用层出不穷,Service的各种架构在一次次的华山论剑上大放异彩

一铭桌面操作系统4.0 SP1安装使用初体验

一铭桌面操作系统4.0 SP1安装使用初体验 近日来,基于之前的勒索病毒事件,考虑到个人信息安全以及工作需要,一直想找一款国产桌面操作系统来进行替代.多年来使用Windows操作系统已经成为习惯,所以在选择国产桌面操作系统时,笔者注重于从平日的操作使用习惯以及界面的视觉效果等方面进行考量.看到这款操作系统的描述是基于用户的真实需求进行完善,并在用户使用习惯.安装操作.系统界面.安全防御等多个方面进行了优化和升级而来,于是决定下载来试用一下,看看是否真如介绍所言. 在一铭云社区(http://bb

聚合类新闻客户端初体验

初体验的产品:今日头条(ios3.6).百度新闻(ios4.4.0).ZAKER(ios4.4.5).鲜果(ios3.8.7).中搜搜悦(ios4.0.1).Flipboard(ios2.3.9) 1.Flipboard 一款国外很火的app,UI以及体验都做得非常不错,很多人都评论其不接地气,在我看来,这确实是一方面,另外,大陆防火长城也有一部分原因,毕竟外来的互联网产品很难在国内扎根. 初体验: 1).首次启动加载速度太慢,用户没有那么多的耐心去使用第一次接触的产品: 2).手指上下滑动更换

【Spark深入学习 -15】Spark Streaming前奏-Kafka初体验

----本节内容------- 1.Kafka基础概念 1.1 出世背景 1.2 基本原理 1.2.1.前置知识 1.2.2.架构和原理 1.2.3.基本概念 1.2.4.kafka特点 2.Kafka初体验 2.1 环境准备 2.2 Kafka小试牛刀 2.2.1单个broker初体验 2.2.2 多个broker初体验 2.3 Kafka分布式集群构建 2.3.1 Kafka分布式集群构建 2.3.2 Kafka主题创建 2.3.3 生产者生产数据 2.3.4消费者消费数据 2.3.5消息的

Xamarin.iOS开发初体验

Xamarin是一个跨平台开发框架,这一框架的特点是支持用C#开发IOS.Android.Windows Phone和Mac应用,这套框架底层是用Mono实现的. Mono是一款基于.NET框架的开源工程,包含C#语言编译器.CLR运行时和一组类库,能运行于Windows.Linux.Unix.Mac OS和Solaris.对于.NET程序员来说,Xamarin是走向安卓.iOS.Mac跨平台开发的神器,不仅能用熟悉的C#来开发,还能使用Visual Studio作为IDE.本文内容是Xamar

CloudNotes之桌面客户端篇:增强的笔记列表

今天,我发布了CloudNotes的一个更新版本:1.0.5484.36793.这个版本与1.0.5472.20097不同的是,它拥有增强的笔记列表,与之前单调的列表系统相比,新的笔记列表不仅可以显示笔记的摘要内容,而且还可以从笔记中抽取第一张图片,并显示图片的详细信息: 怎么样?相比之前的笔记列表,现在的设计是不是能够展示更丰富的信息呢? 升级到最新版本 如果在读完我的第一篇关于CloudNotes的文章,<CloudNotes:一个云端个人笔记系统>之后,已经安装并体验了上一个版本的Clo