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,一经查实,立即删除!

相关文章

Git 合并分支选项 --squash 合并提交历史

git merge --squash <branchname>--squash选项的含义是&#xff1a;本地文件内容与不使用该选项的合并结果相同&#xff0c;但是不提交、不移动HEAD&#xff0c;因此需要一条额外的commit命令。其效果相当于将another分支上的多个commit合并成一个&#xff0c;放在当前分…

Kubernetes共享使用Ceph存储

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

在Activity不可见时暂停WebView的语音播放,可见时继续播放之前的语音

private AudioManager mAudioManager;private AudioManager.OnAudioFocusChangeListener mFocusChangeListener; Override protected void onPause() {   super.onPause();   stopPlayVoice(); } Override protected void onResume() {   super.onResume();   startPla…

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…

php.ini-development和php.ini-production的区别

使用zip版MySQL安装时&#xff0c;需要将php.ini-development或php.ini-production改成php.ini&#xff0c;那么php.ini-development和php.ini-production的区别在哪儿呢&#xff0c;通俗的说法时&#xff0c;development是开发环境&#xff0c;production用于生产环境&#xf…

Server.MapPath()的用法

http://blog.csdn.net/qiuhaifeng_csu/article/details/19416407 Server.MapPath(string path)作用是返回与Web服务器上的指定虚拟路径相对应的物理文件路径。其参数path为Web 服务器的虚拟路径&#xff0c;返回结果是与path相对应的物理文件路径。但有时参数并非为虚拟路径&a…

为什么阿里巴巴禁止把SimpleDateFormat定义为static类型的?

在日常开发中&#xff0c;我们经常会用到时间&#xff0c;我们有很多办法在Java代码中获取时间。但是不同的方法获取到的时间的格式都不尽相同&#xff0c;这时候就需要一种格式化工具&#xff0c;把时间显示成我们需要的格式。 最常用的方法就是使用SimpleDateFormat类。这是一…

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

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

[译]关于NODE_ENV,哪些你应该了解

原文 Node.js开发者经常检测环境变量NODE_ENV&#xff0c;但你是否知道设置这个值同时也具有着某些别的意义&#xff1f;阅读本文你将发现这些。NODE_ENV是一个在Express框架中极其常用的环境变量。用其确定应用的运行环境&#xff08;诸如开发&#xff0c;staging&#xff0c;…

GatewayWorker Not Support On Windows.

thinkphp版本&#xff1a;5.1 tp5.1运行命令行php think worker:gateway出现GatewayWorker Not Support On Windows.是因为在tp5.1的命令行中做了判定&#xff0c;不支持windows环境下运行。 这里不支持windows环境并不是说gateway worker不支持windows&#xff0c;而是tp5.1的…

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

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

fastjson SerializerFeature详解

名称含义备注QuoteFieldNames输出key时是否使用双引号,默认为true UseSingleQuotes使用单引号而不是双引号,默认为false WriteMapNullValue是否输出值为null的字段,默认为false WriteEnumUsingToStringEnum输出name()或者original,默认为false UseISO8601DateFormatDate使用ISO…

费曼学习法中问题的提出与反问,扩展与主动查询的学习习惯训练过程

在2022年11月05日的对话中&#xff0c;九迁先讲了女娲补天和女娲造人的故事&#xff0c;女娲造人的故事还讲了两个版本的&#xff0c;随后提到了一个事情&#xff0c;那就是&#xff0c;如果你要找一个神仙一起度过一天&#xff0c;你想找谁&#xff0c;想做些什么&#xff1f;…

Fiddle:使用断点:bpu,bpafter

http://www.cnblogs.com/yoyoketang/p/6778006.html转载于:https://www.cnblogs.com/peixianping/p/7230021.html

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&…

Mobx 与 Redux 的性能对比

在本文中你将看到我最终得出的结论是 Mobx 的性能优于 Redux。但很明显这样的结论是片面的&#xff0c;甚至是有失偏颇的&#xff0c;因为我只选取了一个的场景对两者进行测试。可能真实的情况恰恰相反&#xff0c;Mobx 仅仅在我测试的这个场景中优于 Redux&#xff0c;但是在我…

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

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