WPF应用实战开发指南 - 如何完成附件管理
在我们之前的开发框架中往往都是为了方便对附件的管理都会进行一些简单的封装目的是为了方便快速的使用并达到统一界面的效果。本文主要介绍基于SqlSugar开发框架的WPF应用端对于附件展示和控件的一些封装处理界面效果供大家参考。PS给大家推荐一个C#开发可以用到的界面组件——DevExpress WPF它拥有120个控件和库将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。DevExpress新旧版本帮助文档下载可进QQ qun获取1697253161. 回顾附件管理WinForm端以及VueElement的前端界面效果由于我们统一了附件的处理方式底层同时支持多种上传方式FTP文件上传、常规文件上传、以及OSS的文件上传等方式因此界面展示也是统一的话就可以在各个界面端达到统一的UI效果使用起来更加方便。例如我们在Winform的系统界面中编辑信息的一个界面里面分门别类管理很多影像学的图片资料通过查看附件可以看到其中一些图片附件的缩略图需要进一步查看可以双击图片即可实现预览效果。上面的界面中可以查看单项的附件数量以及查看具体的附件列表信息。由于Winform端的附件管理已经封装好控件了所以在使用的时候拖动到界面即可。而对于VueElement的BS前端界面我们也可以通过自定义组件的方式实现统一的界面效果。为了管理好这些附件图片等文件信息我们在前端界面提供一些条件供查询如下是Vue3Element Plus的前端管理界面。业务表单中展示附件的效果用户界面展示如下所示。2. WPF应用端的附件管理界面通过以上的界面参考我们可以借鉴的用于WPF应用端的界面设计中设计一些自定义组件用来快速、统一展示附件信息WPF应用端的附件列表展示界面如下所示。而业务表中的附件列表展示我们参考Winform端的用户控件设计方式先展示附件的汇总信息然后可以查看具体的附件列表如下界面所示。需要查看可以单击【打开附件】进行查看具体的附件列表如下界面所示。用户控件的界面代码如下所示。UserControl x:ClassWHC.SugarProject.WpfUI.Controls.AttachmentControl xmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentation xmlns:xhttp://schemas.microsoft.com/winfx/2006/xaml xmlns:coreclr-namespace:SugarProject.Core;assemblySugarProjectCore xmlns:dhttp://schemas.microsoft.com/expression/blend/2008 xmlns:hchttps://handyorg.github.io/handycontrol xmlns:helpersclr-namespace:WHC.SugarProject.WpfUI.Helpers xmlns:localclr-namespace:WHC.SugarProject.WpfUI.Controls xmlns:mchttp://schemas.openxmlformats.org/markup-compatibility/2006 NameAttachmet d:DesignHeight100 d:DesignWidth300 mc:Ignorabled Grid Width{Binding Width, ElementNameAttachmet} MinWidth250 Grid.ColumnDefinitions ColumnDefinition WidthAuto / ColumnDefinition WidthAuto / ColumnDefinition Widthauto / /Grid.ColumnDefinitions TextBlock Grid.Column0 MinWidth100 Margin5,0,10,0 VerticalAlignmentCenter Text{Binding PathText, ElementNameAttachmet} / TextBlock x:NametxtTips Grid.Column1 Margin10,0,10,0 VerticalAlignmentCenter / Button Grid.Column2 Margin10,0,10,0 VerticalAlignmentCenter Command{Binding OpenAttachmentCommand, ElementNameAttachmet} CommandParameter{Binding PathAttachmentGUID, ElementNameAttachmet} Content打开附件 Style{StaticResource ButtonSuccess} / /Grid /UserControl后端的代码和常规的自定义控件类似定义一些属性名称以及相关的事件处理即可如下代码所示。namespace WHC.SugarProject.WpfUI.Controls { /// summary /// AttachmentControl.xaml 的交互逻辑 /// /summary public partial class AttachmentControl : UserControl { private static string TipsContent 共有【{0}】个附件; /// summary /// 标题 /// /summary public string Text { get { return (string)GetValue(TextProperty); } set { SetValue(TextProperty, value); } } public static readonly DependencyProperty TextProperty DependencyProperty.Register( nameof(Text), typeof(string), typeof(AttachmentControl), new FrameworkPropertyMetadata(文本说明, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)); /// summary /// 附件组的GUID /// /summary public string? AttachmentGUID { get { return (string?)GetValue(AttachmentGUIDProperty); } set { SetValue(AttachmentGUIDProperty, value); } } public static readonly DependencyProperty AttachmentGUIDProperty DependencyProperty.Register( nameof(AttachmentGUID), typeof(string), typeof(AttachmentControl), new FrameworkPropertyMetadata(, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, new PropertyChangedCallback(OnAttachmentGUIDPropertyChanged))); private static async void OnAttachmentGUIDPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (d is not AttachmentControl control) return; if (control ! null) { var oldValue (string?)e.OldValue; // 旧的值 var newValue (string?)e.NewValue; // 更新的新的值 //更新数据源 await control.InitData(newValue); } } /// summary /// 更新数据源 /// /summary /// param nameattachmentGuid附件GUID/param /// returns/returns private async Task InitData(string attachmentGuid) { int count 0; if (!attachmentGuid.IsNullOrEmpty() !this.IsInDesignMode()) { var itemList await BLLFactoryIFileUploadService.Instance.GetByAttachGUID(attachmentGuid); if (itemList ! null) { count itemList.Count; } } //多语言处理提示信息 var newTipsContent JsonLanguage.Default.GetString(TipsContent); this.txtTips.Text string.Format(newTipsContent, count); } /// summary /// 默认构造函数 /// /summary public AttachmentControl() { InitializeComponent(); } /// summary /// 打开附件列表 /// /summary [RelayCommand] private async Task OpenAttachment(string attachmentGuid) { var dlg App.GetServiceFileUploadViewPage(); dlg!.AttachmentGUID attachmentGuid; if(dlg.ShowDialog() true) { await this.InitData(attachmentGuid); } } } }最后我们通过打开一个新的页面展示附件列表即可附件列表可以通过代码生成工具快速生成根据数据库结构生成相关的界面展示代码。界面生成后合并到系统中即可使用。我们可以切换列表页面为图片列表的方式展示如下界面所示。如果是图片文件我们提供一个预览的入口利用HandyControl的图片预览控件ImageBrowser 控件实现图片的预览处理。DataGridTemplateColumn Width* Header预览/文件 DataGridTemplateColumn.CellTemplate DataTemplate StackPanel TextBlock Text{Binding SavePath} Visibility{Binding IsImage, Converter{StaticResource Boolean2VisibilityReConverter}} / Image Height50 Margin2 MouseLeftButtonDownImage_MouseLeftButtonDown Source{Binding Converter{StaticResource FileUploadImagePathConverter}} ToolTip单击打开图片预览 Visibility{Binding IsImage, Converter{StaticResource Boolean2VisibilityConverter}} / /StackPanel /DataTemplate /DataGridTemplateColumn.CellTemplate /DataGridTemplateColumn预览的事件代码如下所示。private void Image_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e) { var image sender as Image; if (image ! null) { var path ((BitmapImage)image.Source).UriSource.AbsoluteUri; var dlg new ImageBrowser(new Uri(path)); dlg.ShowTitle false; dlg.KeyDown (s, e) { if (e.Key System.Windows.Input.Key.Escape) { dlg.Close(); } }; dlg.ShowDialog(); } }预览界面效果图如下所示。以上就是我们在处理WPF端附件、图片列表的一些处理界面设计以及一些操作过程。本文转载自博客园 - 伍华聪

相关新闻

性能优化:让系统“跑得更快“

性能优化:让系统“跑得更快“

性能优化:让系统"跑得更快" 你开车上班: 原来30分钟到 现在想25分钟到 可以换车、可以换路线、可以早点出门 性能优化就是让系统从"30分钟"变成"25分钟"的过程。 性能优化的原则 1. 先测量,再优化 不要猜,要用数据: 猜测:数据库慢 实…

2026/7/29 17:34:27 阅读更多 →
界面控件DevExpress WPF导航组件,助力升级应用程序用户体验!(下)

界面控件DevExpress WPF导航组件,助力升级应用程序用户体验!(下)

DevExpress WPF的Side Navigation(侧边导航)、TreeView、导航面板组件能帮助开发者在WPF项目中添加Windows样式的资源管理器栏或Outlook NavBar(导航栏),DevExpress WPF NavBar和Accordion控件包含了许多开发人员友好的…

2026/7/29 17:34:27 阅读更多 →
如何解决背光升压电路EMI问题

如何解决背光升压电路EMI问题

一、前言随着仪表市场需求日益旺盛与产品功能日趋复杂,其电磁兼容性问题也愈发凸显。其中,背光电路的EMI干扰尤为普遍。本文将通过一个实际案例,深入分析并展示该问题的有效解决方案。二、整改案例下图是一款仪表类设备的EMI测试数据&#xf…

2026/7/29 17:34:27 阅读更多 →

最新新闻

从零到一:6个关键步骤带你掌握大模型核心技术

从零到一:6个关键步骤带你掌握大模型核心技术

从零到一:6个关键步骤带你掌握大模型核心技术 【免费下载链接】Foundations-of-LLMs A book for Learning the Foundations of LLMs 项目地址: https://gitcode.com/GitHub_Trending/fo/Foundations-of-LLMs 你是否曾对大语言模型感到既好奇又困惑&#xff1…

2026/7/29 17:50:34 阅读更多 →
3大突破性功能揭秘:微软Qlib如何用AI重构量化投资全流程

3大突破性功能揭秘:微软Qlib如何用AI重构量化投资全流程

3大突破性功能揭秘:微软Qlib如何用AI重构量化投资全流程 【免费下载链接】qlib Qlib is an AI-oriented Quant investment platform that aims to use AI tech to empower Quant Research, from exploring ideas to implementing productions. Qlib supports divers…

2026/7/29 17:50:34 阅读更多 →
如何快速实现NCM文件解密:完整逆向工程实战指南

如何快速实现NCM文件解密:完整逆向工程实战指南

如何快速实现NCM文件解密:完整逆向工程实战指南 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump ncmdump是一款专业的网易云音乐NCM加密文件解密工具,通过逆向工程分析加密算法,实现NCM到MP3格式的…

2026/7/29 17:50:34 阅读更多 →
B站字幕提取终极指南:3分钟学会免费下载视频字幕的完整教程

B站字幕提取终极指南:3分钟学会免费下载视频字幕的完整教程

B站字幕提取终极指南:3分钟学会免费下载视频字幕的完整教程 【免费下载链接】BiliBiliCCSubtitle 一个用于下载B站(哔哩哔哩)CC字幕及转换的工具; 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBiliCCSubtitle 还在为B站视频的字幕无法下载而烦恼吗&…

2026/7/29 17:50:34 阅读更多 →
从Prompt到PPT:AI时代培训师必备的5维材料生成能力模型(附Gartner认证能力测评二维码)

从Prompt到PPT:AI时代培训师必备的5维材料生成能力模型(附Gartner认证能力测评二维码)

更多请点击: https://intelliparadigm.com 第一章:从Prompt到PPT:AI时代培训师的能力跃迁本质 当培训师输入一句“生成面向新员工的《数据安全意识》15分钟微课大纲,含3个互动提问与1个情景案例”,AI在3秒内输出结构完…

2026/7/29 17:50:34 阅读更多 →
translate.js终极指南:两行代码实现网页AI智能翻译,无需重构就能国际化

translate.js终极指南:两行代码实现网页AI智能翻译,无需重构就能国际化

translate.js终极指南:两行代码实现网页AI智能翻译,无需重构就能国际化 【免费下载链接】translate AI i18n, Two lines of js realize automatic html translation. No need to change the page, no language configuration file, no API key, SEO frie…

2026/7/29 17:49:34 阅读更多 →

日新闻

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:00:23 阅读更多 →
AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础

AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础

AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础 在上一期「AI编程系列」中,我们学习了如何构建一个基础的 AI 问答系统,通过简单的输入输出让模型回应问题。但现实世界中的 AI 应用往往需要处理更复杂的场景:…

2026/7/29 0:00:23 阅读更多 →
AI智能体开发实战:从工具调用到企业级部署

AI智能体开发实战:从工具调用到企业级部署

1. 从被动问答到主动执行:AI Agent的范式转变过去两年,大语言模型最显著的应用形态是聊天机器人——用户提问,AI回答。但真正的生产力革命发生在2023年下半年:当AI学会主动调用工具完成任务时,生产力工具的历史被彻底改…

2026/7/29 0:00:23 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/28 12:04:22 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/29 15:00:03 阅读更多 →

月新闻