XAML 创建浏览器应用程序

 XAML 创建浏览器应用程序

XAML 创建浏览器应用程序

作者:WPFDevelopersOrg - 驚鏵

原文链接:https://learn.microsoft.com/zh-cn/dotnet/desktop/wpf/app-development/wpf-xaml-browser-applications-overview?view=netframeworkdesktop-4.8

  • 框架使用.NET40

  • Visual Studio 2019;

  • 什么是XBAP ?

    • XBAP是应用于浏览器中的应用程序。

    • WPF的不同点如下。

    • 它是运用于浏览器窗口中。

    • 同通常具有优先的权限。

    • 它不需要安装。

    • 也就是把它缓存到计算机当中。不会提示安装警告,更新也是如此。

    • XBAP要受到安全模型的限制。

  • XBAP的运行要求有哪些?

    • IE6及以上的版本。

    • Firefox(火狐)2及以上版本。

    • XBAP 部署到 Web 服务器,例如 Microsoft Internet Information Services (IIS) 5.0 或更高版本。不需要在 Web 服务器上安装 .NET Framework,但是需要注册 WPF 多用途 Internet 邮件扩展 (MIME) 类型和文件扩展名。

1)新建 WPF浏览器应用(.NET Framework) 如下图,创建完成会默认生成一个Page1.xaml

3126342b95147d667837ecbee7760ba5.png

👇

151ed0d6808a12f184d37ab726a402e9.png

2)修改Page1.xaml的代码如下

<Page x:Class="WpfBrowserAppSample.Page1"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:wpfdev="https://github.com/WPFDevelopersOrg/WPFDevelopers"xmlns:local="clr-namespace:WpfBrowserAppSample"mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800"Title="WpfBrowserAppSample - Page"><Grid><Grid.ColumnDefinitions><ColumnDefinition/><ColumnDefinition Width="Auto"/></Grid.ColumnDefinitions><Grid.RowDefinitions><RowDefinition Height="40"/><RowDefinition/><RowDefinition Height="40"/></Grid.RowDefinitions><TextBox wpfdev:ElementHelper.IsWatermark="True"wpfdev:ElementHelper.Watermark="请输入内容"/><Button Grid.Column="1" Style="{StaticResource PrimaryButton}" Content="确定"/><DataGrid Grid.Row="1" Grid.ColumnSpan="2"Margin="0,10"AutoGenerateColumns="False" ItemsSource="{Binding UserCollection,RelativeSource={RelativeSource AncestorType=local:Page1}}"><DataGrid.Columns><DataGridTextColumn Header="Date" Binding="{Binding Date}" IsReadOnly="True"/><DataGridTextColumn Header="Name" Binding="{Binding Name}" IsReadOnly="True"/><DataGridTextColumn Header="Address" Binding="{Binding Address}" IsReadOnly="True"/></DataGrid.Columns></DataGrid><StatusBar Grid.Row="2" Background="{StaticResource WindowBorderBrushSolidColorBrush}"Foreground="White"Grid.ColumnSpan="2"><StatusBarItem>© WPFDevelopersOrg</StatusBarItem><Separator Background="White" Margin="10,10"/><StatusBarItem x:Name="VersionNumber" >V 1.0</StatusBarItem></StatusBar></Grid>
</Page>
  • Page1.xaml.cs的代码如下

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
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;namespace WpfBrowserAppSample
{/// <summary>/// Page1.xaml 的交互逻辑/// </summary>public partial class Page1 : Page{public static readonly DependencyProperty UserCollectionProperty =DependencyProperty.Register("UserCollection", typeof(ObservableCollection<UserInfo>), typeof(Page1),new PropertyMetadata(null));public ObservableCollection<UserInfo> UserCollection{get => (ObservableCollection<UserInfo>)GetValue(UserCollectionProperty);set => SetValue(UserCollectionProperty, value);}public Page1(){InitializeComponent();Loaded += delegate{var time = DateTime.Now;UserCollection = new ObservableCollection<UserInfo>();for (var i = 0; i < 4; i++){UserCollection.Add(new UserInfo{Date = time,Name = "WPFDevelopers",Address = "No. 189, Grove St, Los Angeles",});time = time.AddDays(2);}};}}public class UserInfo{public DateTime Date { get; set; }public string Name { get; set; }public string Address { get; set; }}}
37e173c8c2cf6b7dddef2b55964875c0.png

创建完全信任的 XBAP

此设置将进行以下更改:

  • 在项目文件中,将 <TargetZone> 元素值更改为 Custom

  • 在应用程序清单 (app.manifest) 中,将 Unrestricted="true" 特性添加到 PermissionSet 元素。

3)修改app.manifest的此处代码,如不修改IE浏览器不能正常打开WpfBrowserAppSample.xbap

409b7fb619c159157f22337d5712ee3e.png
<PermissionSet class="System.Security.PermissionSet"version="1"ID="Custom"SameSite="site"Unrestricted="true" />

4)运行目录下使用IE浏览器打开WpfBrowserAppSample.xbap预览如下。

41543cc05dd9df43ff5739b1ef002251.png

👇

b00ff2bf46a71f6983ad5ba6bf4e0290.png

👇

b94f59bd856e8e10f87ef5640e11da95.png

5)发布XBAP步骤如下。

57de32a05346b478d1a3e5e22dc5221b.png

👇

1c756da4ba3f2f0bc80316c148b0c87b.png

👇

3a5891c0ebf4d1b9a4662cfb713de3c4.png

6)新建IIS

5910414c2f7ef0656ceb8575651aa302.png

7)然后到发布的目录C:\SampleApp\WpfBrowserAppSample\WpfBrowserAppSample\publish\下创建index.htm

<!DOCTYPE html>
<html><head><meta charset="utf-8"></head><frameset><frame src="WpfBrowserAppSample.xbap"></frameset>
</html>

8)开始访问http://localhost:5050 如端口号冲突可设置其他。

fc5df6aa610ea7cbff1e7938ab963ef8.png

👇

00e2ac4f91aa950deeacdc94c2d134c1.png

如果未运行成功请参考:

  • 您需要转到 Internet 选项 --> 安全选项卡 --> 自定义级别 --> 并启用选项 XAML 浏览器应用程序  --> 启用

8d1bcbe849a354053b665bd693e14101.pngb8270d32b10cb75f027e0a74eac3ceb7.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/281277.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kubernetes共享使用Ceph存储

目录 简要概述环境测试结果验证简要概述 Kubernetes pod 结合Ceph rbd块设备的使用&#xff0c;让Docker 数据存储在Ceph,重启Docker或k8s RC重新 调 度pod 不会引起数据来回迁移。 工作原理无非就是拿到ceph集群的key作为认证&#xff0c;远程rbdmap映射挂载使用。那么就要启用…

MFC界面库BCGControlBar v25.3新版亮点:Dialogs和Forms

2019独角兽企业重金招聘Python工程师标准>>> 亲爱的BCGSoft用户&#xff0c;我们非常高兴地宣布BCGControlBar Professional for MFC和BCGSuite for MFC v25.3正式发布&#xff01;新版本添加了对Visual Studio 2017的支持、增强对Windows 10的支持等。接下来几篇文…

基于 .NET 7 的 QUIC 实现 Echo 服务

前言随着今年6月份的 HTTP/3 协议的正式发布&#xff0c;它背后的网络传输协议 QUIC&#xff0c;凭借其高效的传输效率和多路并发的能力&#xff0c;也大概率会取代我们熟悉的使用了几十年的 TCP&#xff0c;成为互联网的下一代标准传输协议。在去年 .NET 6 发布的时候&#xf…

关于信息收集和加工的思考

随着互联网的发展&#xff0c;获取信息的手段越来越多&#xff0c;我们对手机的依赖程度超乎想象&#xff0c;每天忙碌着&#xff0c;大脑接收着丰富的信息&#xff0c;感觉每天都学习到了很多的知识。但我们对学习经常会有些误区&#xff1a;1、书买了摆在书架上&#xff0c;看…

8支团队正在努力构建下一代Ethereum

“我们不想在构建 Ethereum 2.0时重新造轮子。” 谈到开发人员为 Ethereum 区块链进行两个独立的升级&#xff08;一个称为 Ethereum 2.0&#xff0c;另一个称为 Ethereum 1x&#xff09;所作出的补充努力&#xff0c;劳尔乔丹坚持认为&#xff0c;在较短的时间内将升级包括在 …

windows环境下TP5.1使用think-worker(Workerman/GatewayWorker)

文章目录首先是解决如何运行gatewayworker调试gatewayworker程序向指定客户端发送消息在TP框架中调用Gateway的API总结说明测试环境 windows10&#xff1b;PHP7.2&#xff1b;TP5.1&#xff1b; 这里只介绍如何使用TP集成的workerman扩展库think-worker&#xff0c;原生workerm…

webpack之DefinePlugin使用

DefinePlugin是webpack注入全局变量的插件&#xff0c;通常使用该插件来判别代码运行的环境变量。在使用该插件需要注意的是&#xff0c;如果在该插件配置了相关的参数&#xff0c;必须要源码中使用&#xff0c;webpack才会注入。例如&#xff1a; new webpack.DefinePlugin({p…

Magicodes.IE 2.7.0发布

2.7.02022.11.07使用SkiaSharp替代SixLabors.ImageSharp移除SixLabors.Fonts感谢linch90的大力支持&#xff08;具体见pr#462&#xff09;部分方法改为虚方法2.7.0-beta2022.10.27使用SixLabors.ImageSharp替代System.Drawing&#xff0c;感谢linch90 &#xff08;见pr#454&…

linux lsof/netstat查看进程和端口号相关命令:

本文为博主原创&#xff0c;未经允许不得转载&#xff1a; 在linux操作时&#xff0c;经常要查看运行的项目的进程和端口号&#xff0c;在这里总结了以下常用到的相关命令&#xff1a; 1.查看系统运行的java项目&#xff0c;并查看进程号 这个用到的命令为&#xff1a; ps -ef|…

C#高级编程9 第17章 使用VS2013-C#特性

C#高级编程9 第17章 使用VS2013 编辑定位到 如果默认勾选了这项&#xff0c;请去掉勾选&#xff0c;因为勾选之后解决方案的目录会根据当前文件选中。 可以设置项目并行生成数 版本控制软件设置 所有文本编辑器行号显示 启用编辑继续 收集调试信息&#xff0c;将影响性能 Code …

还在手画C#依赖关系图吗?快来试试这个工具吧!

还在手画C#依赖关系图吗&#xff1f;快来试试这个工具吧&#xff01;笔者最近见到了一个不错的工具&#xff0c;可以让大家在看代码的时候一键生成C#依赖的类图。非常适合编写文档、查看和学习开源项目设计时使用&#xff0c;比如下方就是笔者通过这个工具生成的Microsoft.Exte…

51 Nod 1027 大数乘法【Java大数乱搞】

1027 大数乘法 基准时间限制&#xff1a;1 秒 空间限制&#xff1a;131072 KB 分值: 0 难度&#xff1a;基础题 给出2个大整数A,B&#xff0c;计算A*B的结果。Input第1行&#xff1a;大数A 第2行&#xff1a;大数B (A,B的长度 < 1000&#xff0c;A,B > 0&#xff09; Out…

关于ASP.NET Core WebSocket实现集群的思考

前言提到WebSocket相信大家都听说过&#xff0c;它的初衷是为了解决客户端浏览器与服务端进行双向通信&#xff0c;是在单个TCP连接上进行全双工通讯的协议。在没有WebSocket之前只能通过浏览器到服务端的请求应答模式比如轮询&#xff0c;来实现服务端的变更响应到客户端&…

更快,更强的.NET 7 发布了

.NET Conf 2022 在昨晚(11⽉8⽇) 11 点 正式开始了&#xff0c;为期三天的会议&#xff08;11⽉8-10⽇&#xff09;&#xff0c; 围绕 .NET 7 展开。相信各位⼩伙伴都已经开始安装 .NET 7 正式版本还有以及相关的开发⼯具。这次 .NET 7 围绕传统的 C# &#xff0c;ASP.NET Core…

jvm(Java virtual machine) JVM架构解释

2019独角兽企业重金招聘Python工程师标准>>> JVM 架构解释 每个Java开发者都知道通过JRE【Java运行环境】执行字节码。 但是很多人都不知道JRE是JVM实现的事实。JVM负责执行字节码的分析 代码的解释和运行。 我们应该了解JVM的架构&#xff0c;这对开发者来说是很重…

WinForm(十五)窗体间通信

在很多WinForm的程序中&#xff0c;会有客户端之间相互通信的需求&#xff0c;或服务端与客户端通信的需求&#xff0c;这时就要用到TCP/IP的功能。在.NET中&#xff0c;主要是通过Socket来完成的&#xff0c;下面的例子是通过一个TcpListerner作为监听&#xff0c;等待TcpClie…

关于Java开发需要注意的十二点流程

1.将一些需要变动的配置写在属性文件中 比如&#xff0c;没有把一些需要并发执行时使用的线程数设置成可在属性文件中配置。那么你的程序无论在DEV环境中&#xff0c;还是TEST环境中&#xff0c;都可以顺畅无阻地运行&#xff0c;但是一旦部署在PROD上&#xff0c;把它作为多线…

Unity经典游戏教程之:雪人兄弟

版权声明&#xff1a; 本文原创发布于博客园"优梦创客"的博客空间&#xff08;网址&#xff1a;http://www.cnblogs.com/raymondking123/&#xff09;以及微信公众号"优梦创客"&#xff08;微信号&#xff1a;unitymaker&#xff09;您可以自由转载&#x…

一款自用的翻译小工具,开源了

一款自用的翻译小工具&#xff0c;开源了TranslationTool作者&#xff1a;WPFDevelopersOrg - 唐宋元明清|驚鏵原文链接&#xff1a;https://github.com/Kybs0/TranslationTool此项目使用WPF MVVM开发。框架使用大于等于.NET461。Visual Studio 2019。最初是支持以下&#xff1…

【ELK集群+MQ】通用部署方案以及快速实现MQ发布订阅服务功能

前言&#xff1a;大概一年多前写过一个部署ELK系列的博客文章&#xff0c;前不久刚好在部署一个ELK的解决方案&#xff0c;我顺便就把一些基础的部分拎出来&#xff0c;再整合成一期文章。大概内容包括&#xff1a;搭建ELK集群&#xff0c;以及写一个简单的MQ服务。如果需要看一…