一、openKylin簡介
openKylin(開放麒麟) 社區(qū)是在開源、自愿、平等和協(xié)作的基礎(chǔ)上,由基礎(chǔ)軟硬件企業(yè)、非營利性組織、社團組織、高等院校、科研機構(gòu)和個人開發(fā)者共同創(chuàng)立的一個開源社區(qū),致力于通過開源、開放的社區(qū)合作,構(gòu)建桌面操作系統(tǒng)開源社區(qū),推動Linux開源技術(shù)及其軟硬件生態(tài)繁榮發(fā)展。
“開放麒麟”(openKylin)是中國首個桌面操作系統(tǒng)開發(fā)者平臺,由國家工業(yè)信息安全發(fā)展研究中心等單位聯(lián)合成立,通過開放操作系統(tǒng)源代碼的方式打造具有自主創(chuàng)新技術(shù)的開源桌面操作系統(tǒng)。
系統(tǒng)鏡像下載地址:https://www.openkylin.top/downloads/index-cn.html
二、Avalonia簡介(https://avaloniaui.net/)
Avalonia是一個跨平臺的.NET框架,用于構(gòu)建漂亮、現(xiàn)代的圖形用戶界面(GUI)。
使用Avalonia,您可以從單個代碼庫創(chuàng)建適用于Windows、macOS、 Linux、iOS、Android和Web Assembly的原生應(yīng)用程序。
Avalonia兼容所有支持.NET Standard 2.0的平臺。
?Avalonia官方支持下列平臺:
-
?Windows 8 及更高版本(雖然它也能在Windows 7上正常工作)
-
?macOS High Sierra 10.13 及更高版本
-
Debian 9 (Stretch) 及更高版本
-
Ubuntu 16.04 及更高版本
-
?Fedora 30 及更高版本
Avalonia11版本的中文官方文檔地址:https://docs.avaloniaui.net/zh-Hans/docs/next/welcome
隨著信創(chuàng)、操作系統(tǒng)國產(chǎn)化替換的推廣進程,一些客戶端項目也會有需要轉(zhuǎn)移到Linux桌面的巨大的市場需求。
目前Linux下桌面程序開發(fā)的常見工具的有:QT、Electron、Blazor。而現(xiàn)在WPF有了Avalonia的加持,勢必會在開發(fā)原生跨平臺應(yīng)用時更具有優(yōu)勢和性價比。
三、VS2022安裝Avalonia開發(fā)插件
首先要安裝visual studio2022的開發(fā)工具,然后在頂部菜單==>擴展中打開管理擴展,安裝以下兩個插件(注意版本)。
四、openKylin安裝.NET Core環(huán)境
在openKylin官方網(wǎng)站上下載鏡像后,可用虛擬機進行安裝,安裝后進入到桌面,然后根據(jù)微軟官方安裝教程:https://learn.microsoft.com/zh-cn/dotnet/core/install/linux通過腳本或者下載手動安裝的方法進行安裝.NET Core環(huán)境。
需要注意的是,openKylin建立的登錄賬戶不具備root權(quán)限,所以在安裝完成后需要配置以下環(huán)境變量,否則運行dotnet時會提示沒有這個命令提示。
具體方法是打開一個終端,然后輸入?
sudo -s
輸入密碼回車,然后終端會變成root權(quán)限的終端,接著輸入下面命令后回車
vim /etc/profile
會打開一個編輯界面,我們按鍵盤的i鍵進入編輯模式,然后到文檔最后插入一行,輸入安裝完.NET Core環(huán)境后提示的PATH路徑,比如:
exprot PATH=$PATH:/home/操作系統(tǒng)登錄名/.dotnet
然后按esc,輸入:wq回車,保存退出。隨后重啟OpenKylin系統(tǒng),重啟后進入到桌面,打開終端,輸入
dotnet --info
回車,看到.NET Core的輸出信息,證明安裝和配置.NET Core環(huán)境沒有問題。
五、使用VS2022建立Avalonia桌面項目
在安裝完Avalonia插件和模板后,我們在創(chuàng)建新的項目的時候,可以直接搜索avalonia關(guān)鍵字,直接創(chuàng)建一個Avalonia C# Project,會有創(chuàng)建向?qū)?,按照向?qū)崾疽徊揭徊絼?chuàng)建完畢。
點擊Create按鈕后,稍等片刻即可完成項目創(chuàng)建,我們把創(chuàng)建的帶Desktop結(jié)尾的項目設(shè)置為啟動項目,然后我們直接F5運行項目,沒有意外的話會看到一個界面,一句英文提示。
六、解決Avalonia桌面項目在openKylin下報Default font name can't be null or empty的問題
?我們把ViewModels\MainViewModel.cs把英文的文字改成中英混合的文字。?
public string Greeting => "歡迎使用 Avalonia!";
點擊頂部菜單的生成==>發(fā)布選定內(nèi)容,目標運行時選linux-x64,然后發(fā)布項目。
?發(fā)布成功后,我們把項目復(fù)制粘貼到openKylin的環(huán)境下,然后在終端中定位到項目目錄,運行
dotnet StudyAvalonia.Desktop.dll
?會看到經(jīng)典的 Default font name can't be null or empty. 的錯誤提示:
?
可見目前它對中文Linux系統(tǒng)的默認字體支持不太好,有的解決辦法是給操作系統(tǒng)設(shè)置為英文,但我們國產(chǎn)系統(tǒng)目標群體絕大部分都需要使用中文環(huán)境。因此我們在開發(fā)項目時自己指定一下項目要用的默認字體來解決這個問題。
這里我們選用阿里巴巴的免費可商用的字體==>阿里巴巴普惠體:https://www.alibabafonts.com/#/font
下載后按照下面目錄結(jié)構(gòu)放入字體文件(也可自定義其它路徑,只要代碼中的路徑做出對應(yīng)調(diào)整即可)
這里記得把字體文件設(shè)置為AvaloniaResource
?然后在Desktop項目中新建兩個類文件
?FontSettings.cs
public class FontSettings { public string DefaultFontFamily = "fonts:MyDesignFontFamilies#Alibaba PuHuiTi 2.0"; public Uri Key { get; set; } = new Uri("fonts:MyDesignFontFamilies", UriKind.Absolute); public Uri Source { get; set; } = new Uri("avares://StudyAvalonia.Desktop/Assets/Fonts/AliBaba", UriKind.Absolute); }
AvaloniaAppBuilderExtensions.cs
1 public static class AvaloniaAppBuilderExtensions 2 { 3 public static AppBuilder UseFontAlibaba([DisallowNull] this AppBuilder builder, Action<FontSettings>? configDelegate = default) 4 { 5 var setting = new FontSettings(); 6 configDelegate?.Invoke(setting); 7 8 return builder.With(new FontManagerOptions 9 { 10 DefaultFamilyName = setting.DefaultFontFamily, 11 FontFallbacks = new[] 12 { 13 new FontFallback 14 { 15 FontFamily = new FontFamily(setting.DefaultFontFamily) 16 } 17 } 18 }).ConfigureFonts(manager => manager.AddFontCollection(new EmbeddedFontCollection(setting.Key, setting.Source))); 19 } 20 }
在Program.cs中注冊一下新建的AppBuilder(.UseFontAlibaba())
1 class Program 2 { 3 // Initialization code. Don't use any Avalonia, third-party APIs or any 4 // SynchronizationContext-reliant code before AppMain is called: things aren't initialized 5 // yet and stuff might break. 6 [STAThread] 7 public static void Main(string[] args) => BuildAvaloniaApp() 8 .StartWithClassicDesktopLifetime(args); 9 10 // Avalonia configuration, don't remove; also used by visual designer. 11 public static AppBuilder BuildAvaloniaApp() 12 => AppBuilder.Configure<App>() 13 .UsePlatformDetect() 14 .UseFontAlibaba() 15 .WithInterFont() 16 .LogToTrace() 17 .UseReactiveUI(); 18 }
?然后在編譯發(fā)布項目,復(fù)制到OpenKylin系統(tǒng)中,重新運行,就可以看到可以正常的跑起來了,界面顯示中文沒有問題了。
七、鳴謝:
https://www.raokun.top/archives/ru-he-zai-avalonia11-zhong-she-zhi-zi-ding-yi-zi-ti
https://github.com/MicroSugarDeveloperOrg/AntDesign.Avalonia文章來源:http://www.zghlxwxcb.cn/news/detail-712134.html
八、轉(zhuǎn)載請注明來源:https://www.cnblogs.com/wdw984/p/17717864.html文章來源地址http://www.zghlxwxcb.cn/news/detail-712134.html
到了這里,關(guān)于解決WPF+Avalonia在openKylin系統(tǒng)下默認字體問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!