首页 > 其他分享 >Avalonia中用FluentAvalonia+DialogHost.Avalonia实现界面弹窗和对话框

Avalonia中用FluentAvalonia+DialogHost.Avalonia实现界面弹窗和对话框

时间:2023-07-23 20:55:39浏览次数:48  
标签:界面 对话框 FluentAvalonia DialogHost 弹窗 Avalonia

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

标签:界面,对话框,FluentAvalonia,DialogHost,弹窗,Avalonia
From: https://www.cnblogs.com/raok/p/17575878.html

相关文章

  • Avalonia项目打包安装包
    Avalonia项目打包安装包要将Avalonia项目打包成安装包,你可以使用Avalonia发布工具来完成1.创建一个发布配置文件在你的Avalonia项目中,创建一个发布配置文件。在项目文件夹中创建一个名为publish.xml的文件,并添加以下内容:<?xmlversion="1.0"encoding="utf-8"?><Publ......
  • python点击提交按钮弹出确定提交对话框,如果点击确定,则弹出考试结果对话框(需要
    Python点击提交按钮弹出确定提交对话框,如果点击确定,则弹出考试结果对话框在开发Web应用程序时,经常需要与用户进行交互,其中一种常见的交互方式是通过弹出对话框来获取用户的确认或显示相关信息。本文将介绍如何使用Python实现点击提交按钮弹出确定提交对话框,并在点击确定后弹出考试......
  • Avalonia 使用EFCore调用SQLite实现Singleton全局注册
    Avalonia使用EFCore调用SQLite实现Singleton全局注册本篇博客是我的开源项目TerraMours.Chat.Ava的更新的记录分享,本次更新使用EntityFrameWorkCore调用SQLite,实现数据的本地化和查询的优化,删除了dbpross类(直接调用SQLite的操作类)。大大提高了代码的简洁度和易读性。通过全局......
  • 基于Avalonia 11.0.0+ReactiveUI 的跨平台项目开发2-功能开发
    基于Avalonia11.0.0+ReactiveUI的跨平台项目开发2-功能开发项目简介:目标是开发一个跨平台的AI聊天和其他功能的客户端平台。目的来学习和了解Avalonia。将这个项目部署在openKylin1.0的系统上。为什么使用Avalonia:之前已经了解了基于Avalonia的项目在国产麒麟系统中运行的......
  • Windows编程系列:通用对话框
    打开文件对话框打开文件对话框,主要用到GetOpenFileName函数,参数为指向OPENFILENAME结构体的指针 1BOOLGetOpenFileName(2LPOPENFILENAMEArg13); 使用方法如下:1#include<windows.h>2#include<iostream>34intmain()5{6OPENFILENAMEofn......
  • 基于Avalonia 11.0.0+ReactiveUI 的跨平台项目开发1-通用框架
    基于Avalonia11.0.0+ReactiveUI的跨平台项目开发1-通用框架Avalonia简介:Avalonia是.NET的一个跨平台UI框架,提供了一个灵活的样式系统,支持广泛的操作系统,如Windows、Linux、macOS,并对Android、iOS和WebAssembly提供了实验性支持。为什么使用Avalonia:之前已经了解了基于Avalon......
  • AvaloniaUI 和 WPF 图形性能的简单测试.
     本文发布于:https://www.cnblogs.com/8u7tgyjire7890/p/17545599.html 原始代码来自于 Avalonia 示例程序https://github.com/AvaloniaUI/Avalonia/blob/master/samples/ControlCatalog/Pages/CustomDrawing.xaml.cs我将其修改为一个单独的Avalonia应用程序,同时将其翻......
  • Avalonia跨平台入门第二十一篇之玩耍CEF
    在前面分享的几篇中咱已经玩耍了Popup、ListBox多选、Grid动态分、RadioButton模板、控件的拖放效果、控件的置顶和置底、控件的锁定、自定义Window样式、动画效果、Expander控件、ListBox折叠列表、聊天窗口、ListBox图片消息、窗口抖动、语音发送、语音播放、语音播放问题;今晚......
  • 01_Avalonia+.NET 6 初识篇
    https://zhuanlan.zhihu.com/p/539490994 前言应信创(主要是国产麒麟系统)的要求,最近在看C/S架构跨平台的解决方案。由于之前的系统是使用WPF开发的,使用Avalonia跨平台改动的工作量会比较小。Avalonia是一个跨平台的.NETUI框架,支持Windows,Linux,MacOSX,IOS环境......
  • XAML UI 框架横向对比(Avalonia/Uno Platform/.NET MAUI)
    本文翻译自 https://github.com/robloo/PublicDocs/blob/master/XAMLFrameworkComparison.md为了最佳阅读体验,请前往 https://github.com/1357310795/XAML-UI-Docs/blob/master/XAMLFrameworkComparison.md https://zhuanlan.zhihu.com/p/638115608XAML框架横向对比多年......