(给DotNet加星标,提升.Net技能)

转自:大头BigHeadcnblogs.com/Big-Head/p/12614118.html

前言

随着 .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.debsudo dpkg -i packages-microsoft-prod.deb

2、安装.Net Core 3.1 Runtmime

sudo apt-get updatesudo apt-get install apt-transport-httpssudo apt-get updatesudo apt-get install dotnet-runtime-3.1

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

https://docs.microsoft.com/zh-cn/dotnet/core/install/linux-package-manager-ubuntu-1904

  • 安装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()            .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“。

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

<Applicationx: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:

其他

贴出一些参考网站给大家

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

  • GitHub:https://github.com/AvaloniaUI/Avalonia

  • 树莓派使用AvaloniaUI:https://www.cnblogs.com/drzhong/p/11678701.html

  • Mac使用AvaloniaUI:https://www.cnblogs.com/seamas/p/11245348.html

推荐阅读  点击标题可跳转

你所不知道的C#中的细节

.NET Core使用NPOI导出复杂美观的ExcelASP.NET Core AutoWrapper 自定义响应输出

看完本文有收获?请转发分享给更多人

关注「DotNet」加星标,提升.Net技能

好文章,我在看❤️

wpf xaml突然不能自动补齐代码_Xaml+C#桌面客户端跨平台初体验相关推荐

  1. Linux(Ubuntu16)下gedit自动补齐代码功能

    gredit编辑器是Ubuntu16.0自带的编辑器,但是该编辑器没有自动补齐功能.所以,博主想要跟Windows下开发一样,有自动补齐功能.经过搜索,博主发现其实很简单,只要在终端输入下面命令,并且 ...

  2. 【转】Emacs -- 自动补齐

    1. Emacs 自带的hippie-expand (参考的是王垠的) hippie-expand是 Emacs 自带的功能, 把M-/ 绑定到 hippie-expand,在.emacs文件中加入 ...

  3. Geany 代码自动补齐功能设置

    很多人用 geany 感觉不方便,有一部分就是相比于 pycham 的自动补齐功能不好使. 现在给大家看下自动补齐功能设置方法,设置完后用起来非常方便哦. Geany 代码自动补全设置: 默认出现自动 ...

  4. Jupyter 编写python代码实现代码自动补齐功能设置实例演示

    Jupyter 代码自动补齐功能 第一章:启用代码自动补齐功能 ① 安装工具包 ② 重启 Jupyter 服务 ③ 功能设置 ④ 效果展示 ⑤ cmd 安装工具包详细过程展示 第一章:启用代码自动补齐 ...

  5. android如何设置自动补,Android Studio 中设置代码块自动补齐

    AS中很多提示键,并不如Eclipse中做的好,需要我们自己去自定义.这里以switch...case为例,讲解一下如何设置代码自动补全. 1.进入settings -->  Editor -- ...

  6. 增加spyder模块代码提示功能和spyder 代码自动补齐设置方式

    增加spyder模块代码提示功能 找到/home/pc314/anaconda3/envs/tensorflow/lib/python3.5/site-packages/spyder/utils/in ...

  7. sql server 语句自动补齐

    sql2008 sql语句自动补齐功能 sql2008的命令自动补齐功能在哪设置 包括查询的表明自动补齐 不想用插件 这个好像2008自带的有这个功能 难道我装的版本不对 楼主说的是自动联想功能吧,任 ...

  8. 输入框限制只能输入数字,正数、负数、0,最多两位小数;数字输入框可以输入负数,并最多保留两位小数;el-number-input去掉四舍五入和自动补齐小数;

    场景: –要求1:输入框只能输入数字,可以使正数.负数.0,小数点最多保留两位. –要求2:不需要自动补齐小数点,也不需要自动四舍五入. element-ui的数字输入框el-input-number ...

  9. Racer: 自动补齐神器

    Racer:Rust 自动补齐神器 原文:Racer - code completion for Rust 翻译:Peter 翻译经验不足,有错请指教,勿喷 Racer全称为Rust Auto-Com ...

最新文章

  1. 山东省第三届数据应用赛事来了!
  2. js之事件冒泡和事件捕获
  3. 转 詹宏志谈数字出版
  4. python 做网页_女生30岁以前,怎么早做打算
  5. 安装kibana,X-pack和elasticsearch插件的全过程
  6. php 表单录入,PHP 表单和用户输入
  7. 招聘 | 平安人寿人工智能研发团队北京研发中心
  8. php远程连接403,php中出现“ HTTP 异常 403 - 禁止访问”解决方法 总结
  9. Scrum方法论(四)
  10. 合同相似可逆等价矩阵的关系及性质_线性代数预习自学笔记-11:等价性与相似性...
  11. java字典树(Trie)实现中文模糊匹配
  12. linux find 拷贝,通过find命令寻找文件并拷贝到一个指定目录方法详解
  13. (转)【MySQL】sync_binlog innodb_flush_log_at_trx_commit 浅析
  14. 第二章:09流程控制[2switch]
  15. java 类 date_第十九回:Java常用类之Date
  16. word怎么显示计算机数字,如何键入word2007圆圈数字1到10及以上?
  17. C++ primer 5th 读完的一点心得体会
  18. edem合成运动教程
  19. 摄影爱好者尝试图库销售时需要注意什么?| 拍者手记
  20. 编辑器、编译器以及IDE

热门文章

  1. 江苏单招试题计算机原理及答案,江苏省对口单招计算机组装与维修计算机原理考题分类汇总.docx...
  2. 建立a8 linux开发环境,Fedora 14下建立 omap3530 开发环境 - 交叉编译器
  3. w7提示无法关闭计算机,win7关不了机怎么回事?老司机教你怎么解决电脑关不了机...
  4. 雨林木风win11 64位安全旗舰版镜像V2021.09
  5. 360浏览器图片放大镜如何关闭
  6. 搜狐视频怎么更改头像
  7. win10 dns异常上不了网如何解决
  8. static,构造器,执行顺序
  9. 暴露的全局方法_期末考试快到了,这4种错误的考试复习方法,越复习越差劲!...
  10. 使用between and查找时间范围时的日期边界问题