WPF+WebView 基础
1、基于.NET8,通过NuGet添加Microsoft.Web.WebView2。

2、MainWindow.xaml代码如下。
<Window x:Class="Demo.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:Pangu"mc:Ignorable="d"xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"Title="MainWindow" Height="450" Width="800"><Grid><Grid.RowDefinitions><RowDefinition Height="50"/><RowDefinition Height="*"/></Grid.RowDefinitions><StackPanel Grid.Row="0" Orientation="Horizontal"><Button x:Name="btnCallJS" Click="CallJSFunction_Click" Content="C# Call JavaScript" Width="120" Height="30" Margin="10,10,0,10"/></StackPanel><DockPanel Grid.Row="1"><wv2:WebView2 Name="webView"/></DockPanel></Grid></Window>
3、MainWindow.xaml.cs代码如下。
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Microsoft.Web.WebView2.Core;
using System;
using System.IO;
using System.Windows;
using Path = System.IO.Path;namespace Demo
{/// <summary>/// Interaction logic for MainWindow.xaml/// </summary>public partial class MainWindow : Window{public MainWindow(){InitializeComponent();// 页面加载初始化InitializeAsync();// 将C#对象注入到WebView2中InitializeWebViewAsync();}private async void InitializeWebViewAsync(){await webView.EnsureCoreWebView2Async(null);webView.CoreWebView2.AddHostObjectToScript("webBrowserObj", new ScriptCallbackObject());await webView.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync("var webBrowserObj = window.chrome.webview.hostObjects.webBrowserObj;");}private async void InitializeAsync(){await webView.EnsureCoreWebView2Async(null);// 获取当前应用程序的目录string appDirectory = AppDomain.CurrentDomain.BaseDirectory+ "Pages\\";// 构造HTML文件的相对路径(假设HTML文件名为index.html)string htmlFilePath = Path.Combine(appDirectory, "index.html");// 将文件路径转换为URIUri htmlFileUri = new Uri(htmlFilePath, UriKind.Absolute);// 设置WebView2的源为HTML文件的URIwebView.Source = htmlFileUri;}private async void CallJSFunction_Click(object sender, RoutedEventArgs e){// 假设你要调用的JavaScript函数名为 ShowAlert,它不接受任何参数string msg = "Hello from C#!";string script = $"ShowAlert('{ msg }');";await webView.CoreWebView2.ExecuteScriptAsync(script);}}
}
4、 ScriptCallbackObject.cs代码如下。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows;namespace Demo
{/// <summary>/// JavaScript调用C#函数类/// </summary>[ClassInterface(ClassInterfaceType.AutoDual)][ComVisible(true)]public class ScriptCallbackObject{public void ShowMessage(string message){MessageBox.Show(message);}}
}
5、index.html页面代码如下。
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>WebView2 Index</title><script>document.addEventListener("DOMContentLoaded", function() {var button = document.getElementById("btnBroadCast");button.addEventListener("click", function() {webBrowserObj.ShowMessage("Hello from JavaScript!");});});function ShowAlert(message) {document.getElementById("title").innerHTML = message;}function showAlert(message) {document.getElementById("title").innerHTML = message;}</script>
</head><body><button id="StartBroadCast">开始广播</button><!-- <button id="btnBroadCCast" hidden="true">开始测试</button> --><button id="btnBroadCast">开始测试</button><h1 id="title"></h1>
</body></html>
6、运行效果如下。

相关文章:
WPF+WebView 基础
1、基于.NET8,通过NuGet添加Microsoft.Web.WebView2。 2、MainWindow.xaml代码如下。 <Window x:Class"Demo.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/win…...
国内光子AI智能引擎:OptoChat AI在南京江北新区亮相
3月3日,从南京市投资促进局传来振奋人心的消息,南京江北新区的一家高科技企业——南京南智先进光电集成技术研究院有限公司(简称“南智光电”),携手南京知满科技等合作伙伴,成功研发出国内首个光子AI智能引…...
vscode离线配置远程服务器
目录 一、前提 二、方法 2.1 查看vscode的commit_id 2.2 下载linux服务器安装包 2.3 安装包上传到远程服务器,并进行文件解压缩 三、常见错误 Failed to set up socket for dynamic port forward to remote port(vscode报错解决方法)-C…...
【安装】SQL Server 2005 安装及安装包
安装包 SQLEXPR.EXE:SQL Server 服务SQLServer2005_SSMSEE.msi:数据库管理工具,可以创建数据库,执行脚本等。SQLServer2005_SSMSEE_x64.msi:同上。这个是 64 位操作系统。 下载地址 https://www.microsoft.com/zh-c…...
使用Maven搭建Spring Boot框架
文章目录 前言1.环境准备2.创建SpringBoot项目3.配置Maven3.1 pom.xml文件3.2 添加其他依赖 4. 编写代码4.1 启动类4.2 控制器4.3 配置文件 5.运行项目6.打包与部署6.1 打包6.2 运行JAR文件 7.总结 前言 Spring Boot 是一个用于快速构建 Spring 应用程序的框架,它简…...
将docker容器打包为.tar包
1. 创建打包脚本 #!/bin/bash # 设置 -e 使得脚本在遇到错误时停止执行 set -e# 必要的参数 exported_container_name"needed_export_container_name_or_id" # 需要被导出的容器的名称或id image_save_name"my_custom_image_name:v25.03.03" # 镜像需…...
SYSTEM文件夹下的文件
sys文件夹下的.c和.h文件里的函数 最重要的倒数第二个 deley文件夹下的.c和.h文件 Systick工作原理 系统滴答定时器是在内核里的 每来一个时钟信号,计数器减一 F1系列时钟源是HCLK(就是AHB总线上的时钟信号) Systick控制寄存器 Systick重装…...
GPPT: Graph Pre-training and Prompt Tuning to Generalize Graph Neural Networks
GPPT: Graph Pre-training and Prompt Tuning to Generalize Graph Neural Networks KDD22 推荐指数:#paper/⭐⭐# 动机 本文探讨了图神经网络(GNN)在迁移学习中“预训练-微调”框架的局限性及改进方向。现有方法通过预训练(…...
【SegRNN 源码理解】PMF的多步并行预测
位置编码 elif self.dec_way "pmf":if self.channel_id:# m,d//2 -> 1,m,d//2 -> c,m,d//2# c,d//2 -> c,1,d//2 -> c,m,d//2# c,m,d -> cm,1,d -> bcm, 1, dpos_emb torch.cat([self.pos_emb.unsqueeze(0).repeat(self.enc_in, 1, 1),self.cha…...
构建自己的AI客服【根据用户输入生成EL表达式】
要实现一个基于对话形式的AI客服系统,该系统能够提示用户输入必要的信息,并根据用户的输入生成相应的EL(Expression Language)表达式编排规则,您可以按照以下步骤进行设计和开发。本文将涵盖系统架构设计、关键技术选型…...
(50)[HGAME 2023 week2]before_main
[HGAME 2023 week2]before_main nss:3501 我们进入那个sub_12EB然后我们发现这个就是base64加密 我们取得qword_4020: 0CxWsOemvJq4zdk2V6QlArj9wnHbt1NfEX/3DhyPoBRLY8pK5FciZau7UMIgTSG 很显然这个是自定义映射base64.然后我们代入我们之前写的base64自定义映射代码 enc:A…...
机器学习数学基础:39.样本和隐含和残差协方差矩阵
假设我们研究学生的数学成绩、英语成绩和学习时间之间的关系。收集了100名学生这三项数据作为样本。 样本协方差矩阵 计算得到的样本协方差矩阵如下(假设数据简化): [ V a r ( 数学 ) C o v ( 数学 , 英语 ) C o v ( 数学 , 学习时间 ) C …...
java之http传MultipartFile文件
【需求】前端请求后端做文件上传或者excel上传,后端不解析直接把MultipartFile传给第三方平台,通过http的方式该怎么写 import org.springframework.web.multipart.MultipartFile;import java.io.*; import java.net.HttpURLConnection; import java.ne…...
深入解析SpringMVC中Http响应的实现机制
在Web应用开发中,处理HTTP请求并返回相应的HTTP响应是核心任务之一。SpringMVC作为Java生态中广泛使用的Web框架,提供了灵活且强大的机制来处理HTTP请求和生成HTTP响应。本文将深入探讨SpringMVC中如何实现HTTP响应的返回,涵盖从控制器方法的…...
构建一个支持精度、范围和负数的-Vue-数字输入框
分析并实现一个支持精度、范围和负数控制的数字输入框。 背景 在很多业务中,我们经常需要使用数字输入框,通常这些输入框会涉及到数字校验,比如限制输入范围、设置小数精度、是否允许负数等。每次写表单时,都需要重复定义这些校…...
尚硅谷爬虫note14
一、scrapy scrapy:为爬取网站数据是,提取结构性数据而编写的应用框架 1. 安装 pip install scrapy 或者,国内源安装 pip install scrapy -i https://pypi.douban.com/simple 2. 报错 报错1)building ‘twisted.te…...
1438. 绝对差不超过限制的最长连续子数组
目录 一、题目二、思路2.1 解题思路2.2 代码尝试2.3 疑难问题2.4 代码复盘 三、解法四、收获4.1 心得4.2 举一反三 一、题目 二、思路 2.1 解题思路 滑动窗口 2.2 代码尝试 class Solution { public:int longestSubarray(vector<int>& nums, int limit) {int cou…...
ZCC5090EA适用于TYPE-C接口,集成30V OVP功能, 最大1.5A充电电流,带NTC及使能功能,双节锂电升压充电芯片替代CS5090EA
概要: ZCC5090EA是一款5V输入,最大1.5A充电电流,支 持双 节 锂 电 池 串 联 应 用 的 升 压 充 电 管 理 I C 。ZCC5090EA集成功率MOS,采用异步开关架构, 使其在应用时仅需极少的外围器件,可有效减少整体 …...
Dify 开源大语言模型应用开发平台使用(二)
文章目录 说明Dify 使用报告1. 应用创建——专业的锂电池相关知识解答1.1 平台简介1.2 创建应用 2. 知识库、工作流、变量、节点与编排节点详解2.1 知识库管理2.2 工作流配置2.3 变量管理2.4 节点与编排节点 3. 测试和调试3.1 单元测试3.2 日志与监控3.3 实时调试3.4 性能测试 …...
【LangFuse】数据集与测试
1. 在线标注 2. 上传已有数据集 import json# 调整数据格式 {"input":{...},"expected_output":"label"} data [] with open(my_annotations.jsonl, r, encodingutf-8) as fp:for line in fp:example json.loads(line.strip())item {"i…...
实战应用:使用autoclaw在快马平台快速开发销售数据监控看板
最近在做一个销售数据监控看板的需求,发现用autoclaw配合InsCode(快马)平台可以快速实现从开发到部署的全流程。整个过程比想象中顺畅很多,特别适合需要快速验证业务场景的情况。这里记录下具体实现思路和关键点: 数据准备与连接 首先用autoc…...
STM32从入门到实战:两周速成指南
STM32快速入门指南:从零基础到项目实战1. 项目概述1.1 STM32与8051的对比分析对于已经掌握8051和C语言的开发者而言,STM32的学习曲线并不陡峭。关键在于理解何时需要从8051迁移到STM32平台:计算能力需求:当8051的主频无法满足复杂…...
收藏!AI技能进化全解析:从聊天搭子到行业专家的成长之路
本文回顾了AI技能的演进过程,从最初只能进行简单对话的聊天机器人,到如今能够理解行业规范、执行复杂任务的智能体。文章详细介绍了AI技能发展的五个阶段:初级聊天机器人、通过函数调用实现工具交互、通用接口MCP规范、智能体引擎赋予环境感知…...
工业数智化转型路径:JBoltAI 工具与定制化服务实践
当前,我国工业数智化已进入高质量发展、规模化推广的新阶段,成为推动制造业转型升级、构建先进工业体系的核心动力。结合行业发展现状与企业实际需求,JBoltAI推出针对性数智化工具及定制服务,为工业企业转型提供实用支撑。一、工业…...
【FreeRTOS实战入门】一、从CubeMX到第一个任务:手把手搭建FreeRTOS工程
1. 为什么选择FreeRTOS与CubeMX组合 第一次接触嵌入式实时操作系统时,很多人会纠结选择哪种RTOS。我当年在uC/OS-II和FreeRTOS之间犹豫了很久,最终选择了后者。原因很简单:FreeRTOS不仅完全免费开源,还有STM32CubeMX这个神器加持。…...
RTX 4090显卡福利:Qwen2.5-VL-7B-Instruct轻量化部署,支持对话历史管理
RTX 4090显卡福利:Qwen2.5-VL-7B-Instruct轻量化部署,支持对话历史管理 1. 项目概述 Qwen2.5-VL-7B-Instruct是阿里通义千问推出的多模态大模型,专为视觉交互任务优化。本教程将展示如何在RTX 4090显卡上实现该模型的轻量化部署,…...
学术PDF处理神器:OpenClaw+GLM-4.7-Flash自动提取关键结论
学术PDF处理神器:OpenClawGLM-4.7-Flash自动提取关键结论 1. 为什么需要自动化文献处理? 作为一名经常需要阅读大量学术文献的研究者,我发现自己花费在整理文献上的时间甚至超过了实际阅读时间。每次下载几十篇PDF后,手动提取目…...
从沙子到芯片:保姆级图解CMOS制造18步核心工艺(附高清流程图)
从沙子到芯片:图解CMOS制造18步核心工艺 想象一下,你手中智能手机的核心处理器,其内部晶体管数量已突破百亿级——这相当于将整个银河系的恒星数量压缩到指甲盖大小的硅片上。而这一切的起点,竟是海滩上最普通的沙子。本文将用18张…...
跨境电商多语种支持:SenseVoice-Small ONNX语音识别模型部署与本地化适配
跨境电商多语种支持:SenseVoice-Small ONNX语音识别模型部署与本地化适配 1. 环境准备与快速部署 SenseVoice-Small ONNX模型是一个经过量化处理的高效语音识别解决方案,特别适合跨境电商场景中的多语言语音处理需求。这个模型支持超过50种语言&#x…...
EMI滤波器选型指南:从共模与差模噪声到实际应用场景
1. EMI滤波器的核心作用与选型挑战 刚入行那会儿,我负责的第一个电源项目就栽在了EMI测试上。设备一上电,测试仪器的曲线就像心电图发作似的疯狂跳动。当时 mentor 只说了一句:"去查查共模和差模的区别"。这句话成了我后来十年硬件…...
