虽说.net core3.0已经可以用于开发wpf和winform程序,可是遗憾的时目前这core下的wpf还是只能运行在windows下,想要在linux下运行wpf估计还要等一段时间。

Avaloniaui :

直接用官网的一句话来描述吧:A cross platform XAML Framework for .NET Framework, .NET Core and Mono

在树莓派 4 B上允许Avaloniaui 简单的步骤:

第一步:

烧录树莓派最新的系统Raspbian ,最新的Raspbian 下载地址

第二步:

Install curllibunwind8gettext and apt-transport-https. The curl and apt-transport-https often are up-to-date.

sudo apt-get install curl libunwind8 gettext apt-transport-https

下载.net core 3.0  arm32 运行时 最新的下载地址

curl -sSL -o dotnet.tar.gz https://download.visualstudio.microsoft.com/download/pr/0c5e013b-fa57-44dc-85bf-746885181278/58647e532fcc3a45209c13cdfbf30c74/dotnet-runtime-3.0.0-linux-arm.tar.gz

创建dotnet解压的目录

sudo mkdir -p /opt/dotnet && sudo tar zxf dotnet.tar.gz -C /opt/dotnet

创建环境变量地址软链接

sudo ln -s /opt/dotnet/dotnet /usr/local/bin

在终端中检测 dotnet core环境是否配置完成

dotnet

第三步:

参考官方在win10上创建一个 avalonia 的项目。

  • 安装最新版本的avalon包 ,参考地址
  • 修改Program.cs
  • namespace wf
    {
    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);//.Start(AppMain, args); // Avalonia configuration, don't remove; also used by visual designer.
    public static AppBuilder BuildAvaloniaApp()
    => AppBuilder.Configure<App>() .UsePlatformDetect()
    .UseReactiveUI();
    }
    }
  • 修改 App.Xaml.cs
  • namespace wf
    {
    public class App : Application
    {
    public override void Initialize()
    {
    AvaloniaXamlLoader.Load(this);
    } public override void OnFrameworkInitializationCompleted()
    {
    if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
    desktop.MainWindow = new MainWindow()
    {
    DataContext = new MainWindowViewModel(),
    };
    // else if (ApplicationLifetime is ISingleViewApplicationLifetime singleView)
    // singleView.MainView = new MainView();
    base.OnFrameworkInitializationCompleted();
    }
    }
    }

      

安装作者分钟的在 arm32 linux机器上编译后的skia包

https://www.nuget.org/packages/Avalonia.Skia.Linux.Natives/1.68.0.2
PM> Install-Package Avalonia.Skia.Linux.Natives -Version 1.68.0.2

打开MainWindow.xaml在页面上加几个按钮和文本

  <StackPanel>
<TextBlock Text="{Binding Greeting}" HorizontalAlignment="Center" VerticalAlignment="Center"/> <Button Classes="btn" Command="{Binding Go}" Content="click me"></Button>
<ContentControl Content="{Binding SubContent}"></ContentControl>
</StackPanel>

对应的 MainWindowViewModel.cs

namespace wf.ViewModels
{
public class MainWindowViewModel : ViewModelBase
{
private object _subContent;
public string Greeting => "Welcome to Avalonia!"; public object SubContent
{
get => _subContent;
set => this.RaiseAndSetIfChanged(ref _subContent, value);
} public void Go()
{
SubContent = new Uc();
} public void Go2()
{
SubContent = new Uc();
}
}
}

 其中 UC是一个自定义的控件,

<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="wf.Views.Uc">
<StackPanel>
<TextBlock Text="我是子控件" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<Button Content="biubiubiu"></Button>
<Calendar></Calendar>
</StackPanel>
</UserControl>

在window上按F5运行程序,如下图所示

cmd到项目根目录输入如下命令完成 linux下的项目发布

dotnet publish -r linux-arm -f netcoreapp3.0

把 \bin\Debug\netcoreapp3.0\linux-arm 下的 publish 上传到树莓派上,在树莓派终端打开输入如下命令

chmod +x publish/xxx
./xxx

稍等片刻会打开窗体,但是发现窗体上的文字没有被渲染出来,如下所示

经过在作者github上的询问得知 是因为字体问题,我不知道avalonia ui用的什么字体,但是我们可以全局修改它的字体,具体步骤如下:

ssh到树莓派执行如下命令安装微软的字体。这里我们主要使用的是微软雅黑的字体

sudo apt-get install ttf-mscorefonts-installer

打开项目的App.Xam参考下面的代码修改

<Application xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:wf"
x:Class="wf.App">
<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}"></Setter>
</Style>
</Application.Styles>
</Application>

  

重新编译,发送的树莓派上执行,即可打开窗口,毕业字体也可以渲染出来。

如果字体还是没有渲染出来,建议把windows下的微软雅黑的字体拷贝到linux上安装:

1、到win10下复制字体(C:\Windows\Fonts)
雅黑:msyh 
等等 你要的字体

2、将要的字体复制到 /usr/share/fonts/chinese/TrueType 目录下 (su cp /fonts/* //usr/share/fonts/chinese/TrueType/*)

3、修改字体权限,使root以外的用户可以使用这些字体。

4、建立字体缓存,命令:cd /usr/share/fonts/chinses/TrueType

mkfontscale
mkfontdir 
fc-cache -fv

5、重启,即可使用。

树莓派 Raspberry Pi 4,.net core 3.0 ,Avalonia UI 开发的更多相关文章

  1. 树莓派(Raspberry Pi 3) - 系统烧录及xshell连接

    树莓派(Raspberry pi)是一块集成度极高的ARM开发板,不仅包含了HDMI,RCA,CSI,HDMI,GPIO等端口,还支持蓝牙以及无线通信.由于 Raspberry Pi 几乎是为 Lin ...

  2. 外网登录访问树莓派 Raspberry Pi

    外网登录访问树莓派 Raspberry Pi 本地的树莓派 Raspberry Pi,只能在局域网内访问,怎样从公网也能登录访问树莓派 Raspberry Pi? 本文将介绍具体的实现步骤. 1. 准 ...

  3. 树莓派(Raspberry Pi)使用Shell编写的极简Service

    树莓派(Raspberry Pi)运行的系统是基于Debian的,不仅可以运行Shell,还支持systemd和docker,可以编写一个简单的服务,让其在启动时运行,执行一些自动化的操作.这里在Ra ...

  4. 树莓派(raspberry pi)学习11: 将树莓派变成一个Web服务器(转)

    将树莓派变成一个Web服务器,通过访问网页,就可以控制树莓派,比如:查看摄像头\开灯等等. 一想到Linux Web服务器,我们首先想到的是,Apache + MySql + Php. 树莓派可以安装 ...

  5. VLOG丨树莓派Raspberry Pi 3安装PLEX并挂载USB硬盘打造最牛的微型家庭影音服务器2018

    视频介绍 树莓派3安装目前最流行的PLEX服务器,实现既能最大限度降低功耗,也能随时随地观看分享影片. 一.在树莓派下安装PLEX媒体服务器 1.在终端,将你的树莓派更新至最新 sudo apt up ...

  6. 用树莓派Raspberry Pi和Micro:bit做一个自拍器

    在这个项目中,我们将使用Python来构建一个由Micro:bit触发树莓派Raspberry Pi和相机模块的自拍器.这是开始使用硬件和简单文本编程的好方法. 我们将学习: 如何设置Raspberr ...

  7. 在 树莓派(Raspberry PI) 中使用 Docker 运行 MySQL

    在 树莓派(Raspberry PI) 中使用 Docker 运行 MySQL 本文主要利用 biarms 提供的 Dockerfile 进行安装. 笔者最新发现! MySQL 5.7 Docker ...

  8. 树莓派(Raspberry Pi)搭建简单的lamp服务

    树莓派(Raspberry Pi)搭建简单的lamp服务: 1. LAMP 的安装 sudo apt-get install apache2 mysql-server mysql-client php ...

  9. 树莓派(raspberry pi)学习4: 更改键盘布局(转)

    树莓派(raspberry pi)用了几次后,发现键盘老是按错,一些字符打不出来或打错 这个问题,折腾我半天.还是把心得分享一下吧 上网查,发现是键盘布局不对,树莓派(raspberry pi)是英国 ...

随机推荐

  1. 转载一篇c++开源框架和库

    值得学习的C语言开源项目 -1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性 ...

  2. jquery中.each()方法遍历循环如何终止方法

    使用return false 终止循环 function checkStar(obj){ var flag=false; //获取本节点星级 var star = obj.getAttribute(& ...

  3. 逻辑卷管理(LVM)

    LVM:Logical Volume Management 逻辑卷管理 LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性. 传统磁盘管理:我们上层是直接访问文件系统,从而对底层的物 ...

  4. Storm实践(一):基础知识

    storm简介 Storm是一个分布式实时流式计算平台,支持水平扩展,通过追加机器就能提供并发数进而提高处理能力:同时具备自动容错机制,能自动处理进程.机器.网络等异常. 它可以很方便地对流式数据进行 ...

  5. 如何阻止<a>标签默认行为和表单提交

    阻止<a>标签默认行为 方式一 (通过return false) <!DOCTYPE html> <html> <head> <meta char ...

  6. 06-char,varchar和nvarchar三者的区别

    总结: 1.首先先知道一下SQLServer中数据存储的基本单位是页.每页的大小是8KB: 2.char(n),里面的n用于定义字符串长度,以字节为单位: 3.三者的区别 * char: 是定长的,比 ...

  7. 微信小程序开发入门教程(一)---hello world

    由于无法备案网站,前期做了个微信小程序(开发版)就搁置了,几乎忘了开发过程.现在重新梳理,做个记录. 一.最基本的小程序前端例子hello 1.下载安装  微信开发者工具  官网: https://d ...

  8. BZOJ 3060: [Poi2012]Tour de Byteotia 并查集

    前 $k$ 个节点形成的结构必定是森林,而 $[k+1,r]$ 之间肯定是都连上,而剩下的一个在 $[1,k],$一个在 $[k+1,r]$ 的节点就能连多少连多少即可. Code: #include ...

  9. Confluence 6.15 修改历史(Change-History)宏

    修改历史(Change-History)宏显示了页面一个的更新历史:版本号,作者,日期和备注.这些内容将会在同一栏中进行显示. 屏幕截图:Confluence 中的修改历史(Change-Histor ...

  10. luoguP3371 【模板】单源最短路径

    P3371 [模板]单源最短路径 3K通过 10.7K提交 题目提供者 HansBug 标签 云端↑ 难度 普及/提高- 时空限制 1s / 128MB 题目描述 如题,给出一个有向图,请输出从某一点 ...