一个基于.NET8+WPF开源的简单的工作流系统
项目介绍
AIStudio.Wpf.AClient 是一个基于 WPF (Windows Presentation Foundation) 构建的客户端框架,专为开发企业级应用而设计。该项目目前版本为 6.0,进行了全面优化和升级,提供了丰富的功能和模块,以满足不同场景下的开发需求。

框架截图


项目特点
-
自动升级(待部署):虽然当前版本尚未正式部署自动升级功能,但未来计划实现客户端的自动更新,方便用户及时获取最新版本。
-
采用 Prism.DryIoc:项目采用 Prism 框架进行 MVVM(Model-View-ViewModel)架构设计,并选用 DryIoc 作为依赖注入容器。这一选择提升了代码的可维护性和可扩展性。
-
AvlonDock 的 Prism 实现:项目集成了 AvlonDock 控件库,通过 Prism 框架实现了灵活且强大的界面布局和窗口管理功能。
-
AOP(面向切面编程):使用 AOP 实现日志记录等横切关注点,减少了代码冗余,提高了系统的可维护性和灵活性。
-
代码生成器:内置了代码生成器,支持从数据库表自动生成对应的 WPF 页面和 ViewModel,极大提高了开发效率。
-
工作流系统:项目包含了工作流编辑器与后台实现,支持用户自定义工作流,并能在后台执行和管理这些工作流。
-
安装包制作:提供了详细的指导,帮助开发者制作自定义安装界面的安装包,方便软件的分发和部署。
-
本地服务启动:项目包含了本地服务的启动和管理模块,支持开发者根据需要启动和管理本地服务。
-
通用 CRUD 配置:无需定义复杂的类,只需在数据库中添加相应的数据,即可实现通用 CRUD(增删改查)功能。
-
拖拽式编程:支持拖拽式编程,用户可以通过拖拽的方式快速构建和定制界面,提升开发效率和用户体验。
-
与 BS(Blazor)共享结构模式:项目采用了与 Blazor 相同的后端框架(AIStudio.Blazor.App),方便开发者在客户端和服务端之间进行代码复用和统一管理。
-
Prism 区域窗口多开与隔离:支持 Prism 区域窗口的多开和隔离,使得开发者能够灵活管理多个窗口和界面,提升应用的交互性和用户体验。
使用技术栈
-
前端:WPF(Windows Presentation Foundation)。
-
后端:ASP.NET Core(采用 AIStudio.Blazor.App 框架)。
-
依赖注入:Prism.DryIoc。
-
AOP:用于日志记录和其他横切关注点。
-
控件库:AvlonDock、自定义 WPF 控件库(AI-wpf-controls)。
项目演示效果









开源地址
https://gitee.com/akwkevin/aistudio.-wpf.-aclient
优秀项目和框架精选
该项目已收录到C#/.NET/.NET Core优秀项目和框架精选中,关注优秀项目和框架精选能让你及时了解C#、.NET和.NET Core领域的最新动态和最佳实践,提高开发工作效率和质量。坑已挖,欢迎大家踊跃提交PR推荐或自荐(让优秀的项目和框架不被埋没🤞)。
-
GitHub开源地址:https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md
-
Gitee开源地址:https://gitee.com/ysgdaydayup/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md
相关文章:
一个基于.NET8+WPF开源的简单的工作流系统
项目介绍 AIStudio.Wpf.AClient 是一个基于 WPF (Windows Presentation Foundation) 构建的客户端框架,专为开发企业级应用而设计。该项目目前版本为 6.0,进行了全面优化和升级,提供了丰富的功能和模块,以满足不同场景下的开发需…...
MFC工控项目实例二十七添加产品参数
承接专栏《MFC工控项目实例二十六创建数据库》 在型号参数界面添加三个参数试验时间、最小值、最大值。变量为double m_edit_time; double m_edit_min; double m_edit_max; 1、在SEAL_PRESSURE.h中添加代码 class CProductPara { public:union{struct{...double m_edit_min;…...
PgSQL常用SQL语句
PgSQL常用SQL语句 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 PgSQL是一种开源的关系型数据库管理系统,它是PostgreSQL的一种实现。本文将介绍一些常用的PgSQL SQL语句&a…...
python多线程处理xlsx,多进程访问接口
import pandas as pd from concurrent.futures import ThreadPoolExecutor# 读取Excel文件 file_path scence.xlsx df pd.read_excel(file_path)# 定义每10行处理逻辑 def process_rows(start_idx):end_idx min(start_idx 10, len(df)) # 处理每10行for i in range(start_…...
PDF无法转换成其他格式的常见原因与解决方法解析
在处理PDF文件转换时,用户常常会遇到一些问题,导致无法将PDF转换为其他格式(如Word、Excel、或图片等)。以下是一些常见原因以及解决方法的解析。 ## 一、常见原因 ### 1. **PDF文件的安全性设置** 许多PDF文件在创建时可能设置…...
蓝桥杯第二十场小白入门赛
2.黛玉泡茶 我的思路代码:(但我不知道哪有错误) #include<iostream> #include<vector> #include<algorithm> using namespace std;int main(){int n,m,k,res1;cin>>n>>m>>k;vector<int>num(n1,0…...
K 个一组反转链表
力扣第 25 题:K 个一组反转链表 题目描述 给定一个链表,将链表每k个节点一组进行反转,并返回修改后的链表。如果最后一组节点数少于 k,则保持原顺序。 示例 1: 输入:1 -> 2 -> 3 -> 4 -> 5&…...
#深度学习:从基础到实践
深度学习是人工智能领域近年来最为火热的技术之一。它通过构建由多个隐藏层组成的神经网络模型,能够从海量数据中自动学习特征和表征,在图像识别、自然语言处理、语音识别等领域取得了突破性进展。本文将全面介绍深度学习的基础知识、主要算法和实践应用,帮助您快速…...
Android Kotlin中协程详解
博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家, 👉点击跳转到教程 前言 Kotlin协程介绍: Kotlin 协程是 Kotlin 语言中的一种用于处理异步编程的机制。它提供了一…...
【webpack学习】
webpack由于历史包袱导致复杂,只要把握关键流程即可 webpack的主要流程loader plugin难点:HMR / 懒加载 原理webpack 的优化手段 构建工具对比 webpack :可以打包任何资源,配置略复杂,适合项目开发rollup࿱…...
H5实现PDF文件预览,使用pdf.js-dist进行加载
H5实现PDF文件预览,使用pdf.js-dist进行加载 一、应用场景 在H5平台上预览PDF文件是在原本已经开发完成的系统中新提出的需求,原来的系统业务部门是在PC端进行PDF的预览与展示,但是现在设备进行了切换,改成了安卓一体机进行文件…...
面试域——面试系统工程
摘要 1. 当前就业面试场景 1.1. 招聘市场的“551 定律” 你知道招聘市场的“551 定律”吗? 551 定律:每一层筛选环节都会有百分之十的折损率。一个岗位从接收简历到发下 Offer 至少要筛选 500 份左右的简历、面试 50 人左右、只有 5 人左右通过面试&am…...
PHP-FPM 性能配置优化
4 核 8 G 服务器大约可以开启 500 个 PHP-FPM,极限吞吐量在 580 qps (Query Per Second 每秒查询数)左右。 Nginx php-fpm 是怎么工作的? php-fpm 全称是 PHP FastCGI Process Manager 的简称,从名字可得知ÿ…...
渗透测试-百日筑基—SQL注入篇时间注入绕过HTTP数据编码绕过—下
day8-渗透测试sql注入篇&时间注入&绕过&HTTP数据编码绕过 一、时间注入 SQL注入时间注入(也称为延时注入)是SQL注入攻击的一种特殊形式,它属于盲注(Blind SQL Injection)的一种。在盲注中,攻击…...
Unity - UGUI动静分离
原理:UGUI 是基于Canvas来进行合并计算的 1.不同Cavans的UI元素,是无法合批渲染,无法实现同一个drawcall 2. 每次合批的时候,会合并计算Canvas下所有的UI元素 , 具体流程: Step1: 对Cavans下所有的UI元素进行合批计算 Step2: …...
arm 体系架构-过程调用约定
ref: ARM体系结构学习笔记:过程调用标准AAPC、 ARM32调用约定、ARM64调用约定_arm64 传参 结构体-CSDN博客 ARM软件逆向工程入门 01 - ARM调用约定(Calling Convention)_armv7函数调用约定-CSDN博客 ARM学习(17&…...
STM32基于LL库的USART+DMA使用
时隔两年半再次更新LL库,本次带来USART DMA 实现接收不定长。 1、开发思路 使用USART DMA接收不定长的功能的思路是:借助USART的空闲中断、DMA发送完成中断。 打开F103的手册可得知,USART的空闲中断触发条件是在接收完成后触发࿰…...
设计模式06-结构型模式1(适配器/桥接/组合模式/Java)
#1024程序员节|征文# 4.1 适配器模式 结构型模式(Structural Pattern)的主要目的就是将不同的类和对象组合在一起,形成更大或者更复杂的结构体。结构性模式的分类: 类结构型模式关心类的组合,由多个类…...
【损害和风险评估&坑洼】路面坑洼检测系统源码&数据集全套:改进yolo11-DCNV3
改进yolo11-DLKA等200全套创新点大全:路面坑洼检测系统源码&数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.10.24 注意:由于项目一直在更新迭代,上面“1.图片效果展示”和“2.视频效果展示”展示的系统图片或者视频可…...
GenAI 生态系统现状:不止大语言模型和向量数据库
自 20 个月前 ChatGPT 革命性的推出以来,生成式人工智能(GenAI)领域经历了显著的发展和创新。最初,大语言模型(LLMs)和向量数据库吸引了最多的关注。然而,GenAI 生态系统远不止这两个部分&#…...
终极D2DX指南:让《暗黑破坏神2》在现代电脑上焕发新生
终极D2DX指南:让《暗黑破坏神2》在现代电脑上焕发新生 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 还在为经典…...
光刻热点修复技术:提升芯片良率的关键方法
1. 光刻热点修复技术概述在45nm及更先进工艺节点下,光刻热点(Litho hotspot)已成为制约集成电路良率提升的关键因素之一。这类问题区域在传统设计规则检查(DRC)中往往难以被完全捕捉,因为它们本质上是由复杂…...
ComfyUI-Impact-Pack完全指南:如何彻底解决AI图像细节增强难题
ComfyUI-Impact-Pack完全指南:如何彻底解决AI图像细节增强难题 【免费下载链接】ComfyUI-Impact-Pack Custom nodes pack for ComfyUI This custom node helps to conveniently enhance images through Detector, Detailer, Upscaler, Pipe, and more. 项目地址: …...
从STM32到华大HC32F460:USB HOST MSC + FatFs R0.13c移植避坑全记录
从STM32到华大HC32F460:USB HOST MSC FatFs R0.13c移植实战指南 作为一名长期使用STM32的嵌入式开发者,第一次接触华大半导体的HC32F460系列MCU时,既兴奋又忐忑。兴奋的是国产MCU的性能已经能够媲美国际大厂,忐忑的是生态差异带来…...
图神经网络终于能“上生产”了?SITS 2026发布首个支持实时增量训练的AI原生图引擎(附Benchmark对比:吞吐提升6.8×,延迟压至12ms)
更多请点击: https://intelliparadigm.com 第一章:AI原生图计算应用:SITS 2026图神经网络工程化方案 SITS 2026 是面向大规模动态图场景的AI原生图计算框架,深度融合GNN训练、图拓扑实时更新与边缘-云协同推理能力。其核心设计摒…...
从HIDL到HAL3:手把手拆解Android相机Provider进程的通信与数据流转
Android相机架构深度解析:从HIDL到HAL3的数据流转与性能优化 在移动影像技术快速迭代的今天,Android相机系统的架构设计直接影响着成像质量与用户体验。作为连接应用层与硬件层的核心枢纽,Camera Provider进程通过HIDL接口与Camera Service通…...
1、Chrome Elements面板:从入门到精通的网页调试实战指南
1. Chrome Elements面板:你的网页调试瑞士军刀 第一次打开Chrome开发者工具时,那个标着"Elements"的标签页看起来就像是一堆杂乱无章的HTML代码。但当我真正开始理解它的功能后,它迅速成为了我每天使用最频繁的开发工具。Elements面…...
避震不是“越硬越好”:拆解阻尼、弹簧与预载的黄金三角法则
在改装领域,“避震越硬操控越好”几乎成了一条默认的“铁律”。不少玩家升级绞牙避震后,第一反应就是将阻尼旋钮拧至紧,以“颠”为荣,仿佛不如此便无法体现硬核姿态。但Cornerspeed必须指出一个被长期忽视的工程事实:刚…...
告别Excel!用CANalyzer系统变量做CAN信号实时运算,保姆级配置流程(附CAPL脚本)
告别Excel!用CANalyzer系统变量实现CAN信号实时运算的工程实践 在车辆网络数据分析领域,工程师们经常需要验证不同CAN信号之间的理论关系,比如车速与轮速的比例校验、扭矩与电流的线性相关性分析。传统做法是将CANoe/CANalyzer采集的数据导出…...
别再用Excel硬扛了!SPSS数据视图和变量视图保姆级上手指南
别再用Excel硬扛了!SPSS数据视图和变量视图保姆级上手指南 第一次打开SPSS时,很多从Excel转过来的用户会愣住——这个界面怎么既熟悉又陌生?左边明明也是表格,但为什么右键菜单里找不到"设置单元格格式"?右上…...
