当前位置: 首页 > article >正文

【项目实战】如何将接口传过来的html文件通过WPF控件展示在桌面应用程序?

一、核心控件WebBrowser /二、创建页面Window x:ClassWPF.HtmlViewerWindow xmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentation xmlns:xhttp://schemas.microsoft.com/winfx/2006/xaml xmlns:dhttp://schemas.microsoft.com/expression/blend/2008 xmlns:mchttp://schemas.openxmlformats.org/markup-compatibility/2006 xmlns:localclr-namespace:WPF mc:Ignorabled TitleHtmlViewerWindow Height450 Width800 WebBrowser x:NameWebBrowserControl/ /Window三、实现构造函数public HtmlViewerWindow(string htmlContent) { InitializeComponent(); Loaded (s, e) { string projectResourcesPath Path.Combine(AppDomain.CurrentDomain.BaseDirectory,Resources,resources); string absoluteResourcesPath projectResourcesPath.Replace(\\,/); string correctedHtml htmlContent.Replace(../resource/, $file:///{absoluteResourcesPath}/); WebBrowserControl.NavigateToString(correctedHtml); }; }Comment:InitializeComponent(); //IDE自动生成的方法负责初始化控件Loaded (s,e) {.....}; //控件加载事件的绑定后面是Lambda表达式绑定一个匿名方法Path.Combine(.....); //路径拼接旨在获取加载html文件时所需的资源文件AppDomain.CurrentDomain.BaseDirectory //获取程序运行时的根目录编译Build的时候会将项目里的Resource文件夹放进程序运行时的根目录;Resources,resources //html文件的资源文件是resources,但是作者在项目下单独建了一个Resources文件夹用来统一存放各种资源projectResourcesPath.Replace(\\,/); //Windows路径用反斜杠\,但URL格式用正斜杠/所以需要替换从而避免转义问题htmlContent.Replace(../resource/, $file:///{absoluteResourcesPath}/); //将html里的相对资源路径../resource/替换为之前定义的绝对路径file:///{absoluteResourcesPath}/从而让WebBrowser能找到资源里的图片样式等资源下图就是我的html里相对资源路径的普遍应用所以作者得替换掉不然找不到资源。这部分仅供参考具体还需看读者自己的html文件里的资源路径。​WebBrowserControl.NavigateToString(correctedHtml); //调用WebBrowser控件的NavigateToString()方法让处理过的html字符串加载到控件上进行展示。四、创建公共方法处理html文件调用页面public void OpenHtmlFile(byte[] target) { try { if (target ! null !string.IsNullOrEmpty(Encoding.UTF8.GetString(target))) { string htmlFilePath string.Empty; string preliminaryContextAfterUTF8 Encoding.UTF8.GetString(target); try { byte[] base64ReportBytes Convert.FromBase64String(preliminaryContextAfterUTF8); htmlFilePath Encoding.UTF8.GetString(base64ReportBytes); } catch (FormatException) { htmlFilePath preliminaryContextAfterUTF8; } WFSCommonHelper.ShowHtmlFilePopup(htmlFilePath); } else { MessageBox.Show(HtmlFileNotFound,Error,MessageBoxButton.OK,MessageBoxImage.Error); } } catch (Exception ex) { Exception ext; ExceptionHandler.HandleException(ex, ExceptionHandlingPolicy.UiPolicy, out ext, GetContext()); //自定义异常处理器 } }Comment:由于作者这里会调用两个接口传过来的html文件并且两个接口传过来的html的编码类型不一样一种是原生文本UTF-8字节类型另一种是Base64编码中转字节类型这两种类型经过初步UTF-8解码之后有各自的核心特征第一种用VS的可视化器打开就能看见html/!DOCTYPE等明文标签第二种只能看见开头为PCFET0NUWVBF的规律字符所以处理字节流就有两种方式首先对字节流进行初步的UTF-8解码然后执行如下操作1.尝试将初步UTF-8解码对象再次进行Base64解码得到原始的html的UTF-8数组如果未发生异常证明从接口传过来的是Base64编码中转字节类型就再执行一次UTF-8解码。2.如果进行Base64解码的时候发生了异常就证明从接口传过来的是原生文本UTF-8字节类型只需要一次UTF-8解码。经过上面解码操作之后就能得到完整的html的字符串然后传给自定义的WFSCommonHelper里的ShowHtmlFilePopup方法。此方法用来打开最初定义的页面并设置初始位置、页面大小。具体实现如下public static void ShowHtmlFilePopup(string htmlFilePath) { Popup popup new Popup(); var control new HtmlViewerWindow(htmlFilePath); popup.WindowStartupLocation WindowStartupLocation.CenterScreen; popup.ShowPopup(control, 1250, 765); }效果图Tips:作者定义单独方法来打开HtmlViewWindow页面是因为项目代码架构是这样规定的需要跟架构一致读者可以将HtmlViewWindow的partial类继承至Window类然后可以定义一个HtmlViewWindow的对象并把html字符串传给此对象的实例最后调用此对象的Show()方法也可达到类似效果。所以具体问题具体分析若有错误欢迎读者在评论区指出。

相关文章:

【项目实战】如何将接口传过来的html文件通过WPF控件展示在桌面应用程序?

一、核心控件<WebBrowser />二、创建页面<Window x:Class"WPF.HtmlViewerWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schem…...

《QGIS快速入门与应用基础》215:批量应用标注样式

作者:翰墨之道,毕业于国际知名大学空间信息与计算机专业,获硕士学位,现任国内时空智能领域资深专家、CSDN知名技术博主。多年来深耕地理信息与时空智能核心技术研发,精通 QGIS、GrassGIS、OSG、OsgEarth、UE、Cesium、OpenLayers、Leaflet、MapBox 等主流工具与框架,兼具…...

系统架构设计的关键技术选型维度

文章目录1. 单体架构 vs. 微服务架构辨析如何选择&#xff1f;2. 单租户 vs. 多租户架构辨析如何选择&#xff1f;3. 数据库选型&#xff08;SQL vs. NoSQL&#xff09;辨析如何选择&#xff1f;4. 部署方式&#xff08;云 vs. 本地&#xff09;辨析如何选择&#xff1f;5. 缓存…...

一键式排产绿色工具

这个功能真的太棒了&#xff01;一键式多策略生成工单排程&#xff0c;能根据物料齐套数量、产能、订单数量优先级等因素进行调整。甘特图也很直观&#xff0c;可以随时拖动时间轴查看进度。导出excel后还能包含需求分析、排产详情等有用信息&#xff0c;简直是生产管理的神器啊…...

Spring核心之IOC与DI:手写工厂到Spring容器演进(第一部分)

一、Spring框架简介Spring是一个轻量级的、开源的JavaEE全栈式应用框架。它的核心价值在于简化企业级应用开发&#xff0c;通过提供一系列模块化解决方案&#xff0c;让开发者能够更专注于业务逻辑。Spring的核心优势&#xff1a;IOC&#xff08;控制反转&#xff09;&#xff…...

windows系统学习总结

1&#xff0c;windows操作系统是指统一管理硬件资源和软件资源的程序2.windows系统分为服务器系统与个人系统3.windows系统中system为内置最高权限、Administrator为管理员用户&#xff08;内置&#xff09;、guest为外来用户、Administrators为管理员组4.net user:查看所有用户…...

WPF MVVM模式实战:C#上位机如何实现数据绑定“零延迟”与高频刷新

摘要:在工业上位机开发中,WPF凭借强大的图形能力成为首选,但MVVM模式下的数据绑定延迟常被视为性能瓶颈。当CAN总线、PLC或传感器以1kHz-5kHz频率推送数据时,传统的INotifyPropertyChanged实现往往导致UI卡顿、CPU飙升甚至界面“假死”。本文深入剖析WPF绑定机制,揭示**“…...

3天搞定!C#上位机 + YOLOv6 实现摄像头实时识别(附UI设计+性能优化)

摘要:在工业质检、安防监控和物流分拣场景中,将YOLOv6深度学习模型集成到C# WPF上位机是常见需求。然而,Python训练模型与C#工程化部署之间的“鸿沟”常让开发者头疼:环境配置复杂、推理延迟高、UI卡顿、内存泄漏。本文提供一套**“3天落地”的实战方案:利用ONNX Runtime实…...

基于高斯 Copula 框架下相位数据的传递熵分解研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

在Windows10上通过虚拟机搭建OpenWrt软路由实现高效网络管理

1. 为什么要在Windows 10上折腾软路由&#xff1f;聊聊我的真实体验 你可能听说过软路由&#xff0c;感觉那是极客或者网络工程师才会玩的东西&#xff0c;离普通用户很远。我以前也这么想&#xff0c;直到我自己的网络需求变得越来越“刁钻”。家里设备多了&#xff0c;手机、…...

Janus-Pro-7B GitHub开源项目分析助手:快速理解项目结构与代码

Janus-Pro-7B GitHub开源项目分析助手&#xff1a;快速理解项目结构与代码 你是不是也经常这样&#xff1f;在GitHub上看到一个很酷的开源项目&#xff0c;点进去想学习一下&#xff0c;结果面对满屏的英文README、复杂的目录结构、还有一堆看不懂的源代码文件&#xff0c;瞬间…...

ArcGIS栅格计算NDVI:从整数陷阱到浮点精度的实战解析

1. 为什么你的NDVI结果只有-1、0、1&#xff1f;揭秘“整数陷阱” 如果你用过ArcGIS的栅格计算器来算NDVI&#xff0c;十有八九踩过这个坑&#xff1a;满怀期待地输入了(NIR - R) / (NIR R)这个经典公式&#xff0c;结果出来的栅格图层&#xff0c;在符号化后一看&#xff0c;…...

GlobalCom^2 Unleashed: Revolutionizing High-Resolution MLLMs with Training-Free Token Compression

1. 高分辨率MLLM的“甜蜜负担”&#xff1a;为什么我们需要Token压缩&#xff1f; 如果你最近玩过像LLaVA-Next这样的多模态大模型&#xff0c;可能会被它处理高分辨率图片的能力惊艳到。它能告诉你照片里远处招牌上的小字&#xff0c;或者数清楚一群鸟里有多少只。这背后是一个…...

2. TI TMS320F28P550 GPIO实战:从图形化配置到按键控制RGB LED

2. TI TMS320F28P550 GPIO实战&#xff1a;从图形化配置到按键控制RGB LED 最近有不少刚开始接触TI C2000系列DSP的朋友问我&#xff0c;拿到开发板后第一个实验该怎么做。我的回答通常是&#xff1a;从GPIO开始。GPIO&#xff08;通用输入输出&#xff09;是嵌入式开发的“Hel…...

案例速递|圆筒纸盒带识别检测

东莞市沃德普自动化科技有限公司 http://www.word​​​​​​op.com 检测背景&#xff1a; 圆筒纸盒的盒盖内置缝制拉带&#xff0c;此拉带外露是方便用户捏住开启盒盖。若盖上后带子未露在外面&#xff0c;相当于“开启功能”失效&#xff0c;纸盒虽外观完整&#xff0c;但本…...

【AI游戏】Unity PlayMaker可视化状态机

【AI&游戏】专栏-直达 Unity PlayMaker 可视化状态机完全指南 一、引言 在Unity游戏开发的生态系统中&#xff0c;PlayMaker无疑是一款极具影响力的可视化编程工具。作为Unity Asset Store中最受欢迎的可视化脚本工具之一&#xff0c;PlayMaker以其独特的可视化状态机&am…...

2026 最强 AI 论文降重 + 降 AIGC 工具盘点:9 款神器破解学术检测难题

在本科毕业论文、研究生学术论文的写作赛道上&#xff0c;「重复率超标」与「AIGC 疑似度过高」已经成为两大拦路虎。随着知网、维普在 2026 年更新 AIGC 检测算法&#xff0c;单纯的同义词替换早已失效&#xff0c;如何高效、安全地让论文同时通过查重与 AIGC 检测&#xff0c…...

javaDoc命令

目录 1. 文档注释 2.javaDoc命令 1. 文档注释 包括类的文档注释、方法的文档注释。 package com.wy.www;//类文档注释 /*** author wy //作者* vertion 1.0 //版本号* since 1.17 //需要的最低jdk版本*/ public class Doc {//方法文档注释/**** author wy* param a //…...

2026 降重 / AIGC 率终极横评:9 大 AI 工具,从 “99.8% AI 痕” 到 “合规绿灯” 的毕业通关秘籍

前言&#xff1a;AI 检测时代&#xff0c;毕业生的 “双率噩梦” 正在升级 2026 年毕业季&#xff0c;毕业论文的 “生死线” 早已不止是重复率 —— 知网、维普、格子达等平台相继上线 AIGC 检测模块&#xff0c;“AI 生成痕迹疑似度 99.8%” 成为比查重不过更致命的扣分点。…...

企业私域增长实战指南:如何选择适合的运营工具

核心要点根据 《2025年数字营销与私域运营行业报告》 的数据&#xff0c;私域触达成本远低于公域&#xff0c;且大多数企业已开展私域相关工作。行业调研显示&#xff0c;私域用户复购率明显高于公域&#xff0c;私域运营的长期价值正在被逐步认可。来自 《2026年中国SaaS行业发…...

Matlab实现CNN-LSTM多输入多输出预测:‘MainCNNLSTMNM.m‘程序及数据...

Matlab实现CNN-LSTM卷积长短期记忆神经网络多输入多输出预测所有程序经过验证&#xff0c;保证有效运行。 可有偿替换数据及其他服务。 1.data为数据集&#xff0c;10个输入特征&#xff0c;3个输出变量。 2.MainCNNLSTMNM.m为主程序文件。 3.命令窗口输出MAE和R2 4.运行版本20…...

低通滤波器的高效滤波算法揭秘:理论与实践探讨

低通滤波器 滤波算法 滤波深夜调试传感器数据的时候&#xff0c;总有几个跳动的数值像捣蛋鬼一样干扰判断——这时候就该低通滤波器出场了。这玩意儿就像给数据戴了个降噪耳机&#xff0c;把那些高频抖动的噪声按在地上摩擦。先看个简单粗暴的移动平均滤波&#xff0c;这可能是…...

2026测开培训机构实测横评:避开大杂烩坑,选对赛道比选大牌重要

2026测开培训机构实测横评&#xff1a;避开大杂烩坑&#xff0c;选对赛道比选大牌重要 想转行测试开发&#xff0c;或者从手工测试进阶测开的朋友&#xff0c;大概率都踩过培训机构的坑——市面上大多IT培训机构都是“全能型”&#xff0c;Java、前端、运维、测试啥都教&#x…...

,电梯程序.基于西门子1200系列两部十层电梯全网最牛逼仿真,博图V15及以上版本,自己编写的...

&#xff0c;电梯程序.基于西门子1200系列两部十层电梯全网最牛逼仿真&#xff0c;博图V15及以上版本&#xff0c;自己编写的&#xff0c;带群控&#xff0c;有超载、故障检修、紧急报警功能&#xff0c;一组外呼按钮&#xff0c;清单有plc组态画面&#xff0c;点表&#xff0c…...

No.378 S7-200PLC程序MCGS组态基于MCGS与PLC的恒温控制设计加热

No.378 S7-200PLC程序MCGS组态基于MCGS与PLC的恒温控制设计加热 手把手搞个恒温箱&#xff1a;当MCGS遇上S7-200PLC 最近在车间折腾一个恒温控制系统&#xff0c;用S7-200 PLC做底层控制&#xff0c;MCGS当人机界面。这组合就像“老坛酸菜配泡面”——经典又实用。今天把实现过…...

追踪算法入门:从 SORT 到 ByteTrack

本文基于 SORT、StrongSORT、ByteTrack 三篇顶会 / 顶刊经典论文&#xff0c;结合工程落地实践&#xff0c;用通俗的语言 具象化例子&#xff0c;讲透多目标跟踪&#xff08;MOT&#xff09;里最核心的几个灵魂问题&#xff1a; 卡尔曼滤波到底在跟踪里干啥用&#xff1f;我都…...

2026大专大数据科学专业需要掌握编程吗?

数据科学就像未来世界的“新石油”&#xff0c;而编程&#xff0c;就是挖石油的那把钻头。没有钻头&#xff0c;你只能看着石油干着急。最近有不少同学和家长在后台问我&#xff1a;大数据科学专业到底需不需要学编程&#xff1f;尤其对大专的同学来说&#xff0c;是不是把理论…...

No.828 温室大棚控制:基于S7-200和组态王的观景大棚控制方案

No.828 基于S7-200和组态王组态观景大棚温室大棚控制最近在搞观景大棚自动化改造&#xff0c;甲方非要整点"既能种菜又能打卡拍照"的科技狠活。得嘞&#xff0c;西门子S7-200组态王这套经典组合直接安排上。别被PLC编程吓着&#xff0c;咱们先从硬件连线唠起。大棚里…...

二十三、第三方登录

目录 一、去平台获取对象&#xff0c;以及id&#xff0c;key等 5. 后端处理与用户绑定 一、去平台获取对象&#xff0c;以及id&#xff0c;key等 &#xff08;1&#xff09;登录第三方&#xff0c;获取相应的的应用实例&#xff0c;比如这里的QQ互联官网里创建 创建好后可以…...

从 0 到精通自主 AI Agent:5 周掌握 OpenClaw 全栈学习路线与实战指南

2026 年&#xff0c;AI Agent 已经彻底完成了从概念 Demo 到生产级工具的跃迁&#xff0c;但绝大多数开发者始终困在两大行业痛点里&#xff1a;一是主流 Agent 方案要么是闭源云端托管&#xff0c;用户的隐私数据、操作权限完全不可控&#xff1b;要么架构过于重型复杂&#x…...