从WPF转到Avalonia的随手记

从WPF转到Avalonia的随手记

使用命令行新建项目

用VS建立的项目版本比较旧,可能已过时,还是多个项目,用来玩demo没必要,因为我也不会有复杂的发布流程,之后再仔细的了解吧。

// 在开始之前,请确保您已经安装了Avalonia模板:
dotnet new install Avalonia.Templates

// 创建项目:
dotnet new avalonia.app -o AvaloniaApp1

自带中文字体偏模糊,替换为鸿蒙中文字体

从网上下载鸿蒙字体压缩包解压后,发现有8个目录,HarmonyOS_Sans可能代表仅英文,因为它文件比较小。Condensed表示紧凑字体,Italic表示斜体,Naskh_Arabic表示阿拉伯系语言(他们很特殊,比如从右到左排版),SC表示简体中文,TC表示传统中文(繁体)。
找到针对简体中文的目录 HarmonyOS_Sans_SC 里面有六个TTF文件。
如果仅使用默认字重(Regular),可仅复制 HarmonyOS_Sans_SC_Regular.ttf 文件,如果使用别的字重(Bold、Light),则复制对应的文件,如果对程序包大小无所谓,可以复制所有。
我的项目名(AvaloniaApp1),将几个TTF文件复制到 Assets 目录内,确保这几个项目文件的属性,生成操作:AvaloniaResource。一般默认就是这个。
根据官方示例,可以预先定义字体为资源,供之后方便使用。

字重(FontWeight)默认引用的是Regular字体文件,对应HarmonyOS Sans SC字体名称,如果FontWeight修改为Bold,则对应HarmonyOS Sans SC Bold字体名称。
avares资源地址,#前的内容指字体文件存放的目录(因为我们有多个FontWeight可用),#后的是字体名,这里就是Regular的字体名称,可以从TTF文件属性中得到。当然,如果我们只用一个FontWeight,也就是不切换字重,那路径可以精确到TTF文件。当然这样做的结果是改了FontWeight也不会有渲染的改变了。

// file:App.axaml

<Application>
  <Application.Resources>
    <FontFamily x:Key="HarmonyFont">avares://AvaloniaApp1/Assets#HarmonyOS Sans SC</FontFamily>
    <!--<FontFamily x:Key="HarmonyFont_SingleFile">avares://AvaloniaApp1/Assets/HarmonyOS_Sans_SC_Regular.ttf#HarmonyOS Sans SC</FontFamily>-->
  </Application.Resources>
</Application>

之后就可以方便的使用这个资源了,比如在窗体上应用:

<Window FontFamily="{StaticResource HarmonyFont}" FontWeight="Medium">
  <TextBlock Text="Hello, 我的测试程序!54321" />
</Window>

从命令行新建的项目,和从VisualStudio2022扩展,创建的内容不一样

2024年3月,从VS新建是多个项目,且升级nuget包到最新版,会导致DataGrid组件报错,退至v11最开始版本可用,不知道是模板有问题还是版本问题。

posted @ 2024-03-28 17:00  三台  阅读(47)  评论(0编辑  收藏  举报