Avalonia中用FluentAvalonia+DialogHost.Avalonia實現界面彈窗和對話框

来源:https://www.cnblogs.com/raok/archive/2023/07/23/17575878.html
-Advertisement-
Play Games

# Avalonia中用FluentAvalonia+DialogHost.Avalonia實現界面彈窗和對話框 本文是項目中關於 **`彈窗界面`** 設計的技術分享,通過 **`FluentAvalonia`+`DialogHost.Avalonia`** 開源nuget包來實現項目中需要 ** ...


Avalonia中用FluentAvalonia+DialogHost.Avalonia實現界面彈窗和對話框

本文是項目中關於 彈窗界面 設計的技術分享,通過 FluentAvalonia+DialogHost.Avalonia 開源nuget包來實現項目中需要 彈框顯示的界面 和所有的 對話框 的展示。

效果如下:

image-20230721232254884

1.項目介紹

本項目是基於Avalonia的GPT的AI會話項目。採用的是最新穩定版本11.0.0-rc1.1。希望通過該項目瞭解和學習Avalonia開發的朋友可以在我的github上拉取代碼,同時希望大家多多點點star。

https://github.com/raokun/TerraMours.Chat.Ava

V1.0版本

下載地址:V1.0版本win64下載地址

目前可用的第一個版本
功能:

  • 最全的介面參數配置
  • 支持反向代理
  • 支持聊天記錄的數據本地化存儲
  • 支持填寫SystemMessage

2.擴展包介紹

1.DialogHost.Avalonia

這是一個用於Avalonia的彈框的擴展,可以通過使用 DialogHost.Avalonia ,把我們的界面或者對話框內容顯示在最頂層,同時可以設置彈框後其他界面不能點擊,避免用戶誤操作。

DialogHost.Avalonia 開源代碼地址:DialogHost.Avalonia

2.FluentAvalonia

FluentAvalonia 提供多種UI 的Avalonia 的工具包,本文中我們只用到 ContentDialog 實現對話框式的設置界面。

FluentAvalonia 開源代碼地址:FluentAvalonia

FluentAvalonia 文檔地址:FluentAvaloniaDocs

3.實現資料庫設置

資料庫設置的界面效果:

image-20230722002133718

1.創建資料庫設置界面

創建資料庫設置界面 DatabaseSettingsView.axaml

image-20230722001704534

2.代碼調用-彈窗

ShowDatabaseSettingsAsync

ShowDatabaseSettingsAsync 是彈窗方法,彈窗的內容是DatabaseSettingsView

image-20230722001911125

代碼如下:

 private async Task ShowDatabaseSettingsAsync() {
     Application.Current!.TryFindResource("My.Strings.DatabaseInfo", out object resource1);
     var dialog = new ContentDialog() {
         Title = resource1,
         PrimaryButtonText = "OK"
     };

     dialog.Content = new DatabaseSettingsView();
     await ContentDialogShowAsync(dialog);
 }
  1. TryFindResource 獲取語言資源文件中的顯示欄位配置
  2. ContentDialogFluentAvalonia 的彈窗
  3. Title 配置窗體的標題
  4. PrimaryButtonText 設置窗體操作欄的按鈕顯示名稱
  5. dialog.Content 設置窗體中顯示的界面的數據源
  6. ContentDialogShowAsync 調用彈窗顯示

ContentDialogShowAsync

ContentDialogShowAsync 是顯示彈框的方法

image-20230722003058888

代碼如下:

public async Task<ContentDialogResult> ContentDialogShowAsync(ContentDialog dialog) {
    var dialogResult = await dialog.ShowAsync();
    return dialogResult;
}

4.實現API介面設置

API介面設置效果如下:

image-20230721232254884

API介面設置 是彈窗的另一種實現,通過axaml中設置。內容不使用 ContentDialog

1.axaml設置彈窗

MainWindow.axaml 中設置 DialogHost

image-20230722003558814

代碼如下:

<Window xmlns="https://github.com/avaloniaui"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:vm="using:TerraMours.Chat.Ava.ViewModels"
        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="TerraMours.Chat.Ava.Views.MainWindow"
		x:DataType="vm:MainWindowViewModel"
		xmlns:dialogHost="clr-namespace:DialogHostAvalonia;assembly=DialogHost.Avalonia"
		RenderOptions.BitmapInterpolationMode="HighQuality"
		xmlns:sty="using:FluentAvalonia.Styling"
		xmlns:ui="using:FluentAvalonia.UI.Controls"
		xmlns:local="using:TerraMours.Chat.Ava.Views"
        Icon="/Assets/terramours.ico"
        Title="TerraMours.Chat.Ava">
	<dialogHost:DialogHost IsOpen="{Binding	ApiSettingIsOpened}"
						   DialogMargin="16"
							DisableOpeningAnimation="True"
						   dialogHost:DialogHostStyle.CornerRadius="8"
						   Background="rgb(52, 53, 65)">
		<dialogHost:DialogHost.DialogContent>
			<local:ApiSettingsView />
		</dialogHost:DialogHost.DialogContent>

		<Panel>
			<local:MainView />
		</Panel>

	</dialogHost:DialogHost>

</Window>

通過 IsOpen 來控制 彈窗的顯示

通過 DialogContent 設置彈窗的界面

5.實現通用的對話框提示

通過 FluentAvalonia+DialogHost.Avalonia 可以直接在代碼里調用顯示彈框,而不用新建一個界面。節省開發時間和維護成本

大面積運用於結果提示和操作確定的對話框中。

示例代碼:

image-20230722010726357

代碼如下:

var dialog = new ContentDialog()
{
    Title = $"介面調用失敗,報錯內容: {response.Error.Message}",
    PrimaryButtonText = "Ok"
};
await VMLocator.MainViewModel.ContentDialogShowAsync(dialog);

6.FluentAvalonia 的樣式設置

通過在 App.axaml 中添加樣式資源可以控制對話框的背景色,以下的設置,是 FluentAvalonia 的文檔里沒有寫的。我還是拉下來 FluentAvalonia 的源碼查到的怎麼修改對話框顏色。

image-20230722004550183

代碼如下:

<Application.Resources>
	<!--彈框下層背景-->
	<Color x:Key="ContentDialogBackground">rgb(42, 43, 55)</Color>
	<!--彈框上層背景-->
	<Color x:Key="ContentDialogTopOverlay">rgb(62, 63, 75)</Color>
	<!--蒙版顏色-->
	<!--<Color x:Key="ContentDialogSmokeFill">rgb(155, 138, 255)</Color>-->
</Application.Resources>

7.技術總結記錄

通過 FluentAvalonia+DialogHost.Avalonia 開源nuget包來實現項目中需要 彈框顯示的界面和所有的對話框的展示。節省開發時間和維護成本。關於FluentAvalonia有更多的UI的擴展,值得花時間去學一學。現在網上的關於Avalonia的資料太少了。

更多項目技術總結記錄在我的博客中:

1.基於Avalonia 11.0.0+ReactiveUI 的跨平臺項目開發1-通用框架

2.基於Avalonia 11.0.0+ReactiveUI 的跨平臺項目開發2-功能開發

3.Avalonia項目打包安裝包

4.Avalonia中用FluentAvalonia+DialogHost.Avalonia實現界面彈窗和對話框

閱讀如遇樣式問題,請前往個人博客瀏覽: https://www.raokun.top

擁抱ChatGPT:https://ai.terramours.site

開源項目地址:https://github.com/raokun/TerraMours.Chat.Ava


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ## 1.等待多線程完成的 CountDownLatch CountDownLatch 允許一個或多個線程等待其他線程完成操作。 假如有這樣一個需求:我們需要解析一個 Excel 里多個 sheet 的數據,此時可以考慮使用多線程,每個線程解析一個 sheet 里的數據,等到所有的 sheet 都解 ...
  • python的環境以及IDE都準備好之後,我們就可以開始Python之旅了。Python的第一個程式通常是列印輸出"Hello, World!",非常簡單。以下是一個示例: ```python print("Hello, World!") ``` # 運行python代碼 首先必須明白python是 ...
  • ## SQL 類 MyBatis 提供了一個 SQL 工具類,使用這個工具類,我們可以很方便在 Java 代碼動態構建 SQL 語句 ```java String newSql = new SQL() ({ SELECT("P.ID, P.USERNAME, P.PASSWORD, P.FULL N ...
  • # 背景 公司最近的業務大量涉及安可項目,要求避免使用第三方組件,原有開發框架支持本地文件存儲/Minio/各類雲存儲,現在要求文件獨立存儲且文件服務需要自研,經調研評估後決定基於SpringBoot開發文件存儲服務,使用s3協議標準,這樣可以直接使用aws-sdk接入無需再開發客戶端,且安全安全性 ...
  • ![image.png](https://cdn.nlark.com/yuque/0/2023/png/2548312/1690078539162-4a2c1ab0-6ab8-4c04-b83b-b15517f0df8a.png#averageHue=%23040100&clientId=u8654 ...
  • ### 歡迎訪問我的GitHub > 這裡分類和彙總了欣宸的全部原創(含配套源碼):[https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) ### 本篇概覽 - 前文咱們曾提到過幾種啟動方式,有一種用m ...
  • [toc] # 一、爬取目標 您好,我是[@馬哥python說](https://www.zhihu.com/people/13273183132),一名10年程式猿。 本次爬取的目標是:[抖音熱榜](https://www.douyin.com/hot) ![抖音熱榜頁面](https://img ...
  • # 簡介 主流的識別庫主要有ZXing.NET和ZBar,OpenCV 4.0後加入了QR碼檢測和解碼功能。本文使用的是ZBar,同等條件下ZBar識別率更高,圖片和部分代碼參考[在C#中使用ZBar識別條形碼](https://www.cnblogs.com/w2206/p/7755656.htm ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...