问题标签 [xaml-islands]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
81 浏览

c# - XAML 岛,尝试发布 WPF 项目时总是出错。更多人有同样的问题?

我正在尝试运行 Microsoft 在https://github.com/microsoft/Xaml-Islands-Samples提交的 WPF XAML Islands 示例。每次我发布应用程序并尝试在任何 Windows 10 机器上执行项目时(是的,我已确认具有相同的修订版)我都会收到相同的错误:

应用程序:WPF_XAMLIslands_v1.exe CoreCLR 版本:4.700.20.36602 .NET Core 版本:3.1.7 描述:进程因未处理的异常而终止。异常信息:System.IO.FileLoadException:无法加载文件或程序集“System.Runtime,版本=4.2.2.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”。找到的程序集的清单定义与程序集引用不匹配。(0x80131040) 文件名:'System.Runtime,版本=4.2.2.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a'

对这件事有什么想法???我使用的 windows 10 的版本是 2004

0 投票
0 回答
217 浏览

c# - 我可以通过 XAML Islands 在 WPF 中使用 ContentDialog

在某些情况下,我想调用 Windows 10 样式对话框,因为它更美观、更现代。但是我们的项目使用的是WPF,不能ContentDialog直接调用。

我不确定 XAML Islands 是否能满足我的要求。

我按照MS的文档,WindowsXamlHost在XAML中添加了一个,并在回调中设置了Title,Content等属性ChildChanged,但是它抛出了一个异常:

XAML

C#

如果我遵循其他文档:https ://docs.microsoft.com/en-us/windows/communitytoolkit/controls/wpf-winforms/windowsxamlhost 当我调用时会显示相同的异常ShowAsync()

有人可以帮助我吗?

0 投票
1 回答
227 浏览

c# - 如何在 WPF 中为 XAML 岛使用正确的 WindowsRuntime.dll?

我正在开发一个 WPF 应用程序,我想添加XAML Islands以便能够在我的应用程序中使用 Windows 10 控件。按照教程,我Microsoft.Toolkit.Wpf.UI.XamlHost通过 Nuget 包管理器添加了项目。它还安装了它的依赖项,例如Microsoft.Windows.SDK.Contracts (10.0.18362.2005),它依赖于System.Runtime.WindowsRuntime >= 4.6.0. 当我运行项目时,出现如下编译错误:

清除错误消息,XamlHost 安装了它的依赖项(它修改了app.configpackages.config文件 - 确切的行发布在下面),并且我还通过MyProject.csproj以下方式在文件中默认添加了 WindowsRuntime.dll:

因此,我留下了当前与 XamlHost 一起安装的依赖项,并删除了默认的依赖项,即我在上面发布的内容。然后,当我编译它时抛出一个错误弹出窗口:This application has failed to start because the application configuration is incorrect.我还尝试删除另一个导入,它是在我安装 XamlHost 项目时添加的:

因此,从app.config以下行中删除:

并从packages.config

但它抛出了相同的弹出窗口,即项目配置不正确。

还更新到最新的 Visual Studio(我正在使用 vs2019 社区),更新到最新的 windows SDK 和最新的 .NET Framework。

所以,有几个问题:

  1. 文件中的每个引用MyProject.csproj都是从文件夹中添加的packages,除了这个WindowRuntime,它来自 Program Files(上面的路径),为什么没有从packages文件夹中引用?(还尝试将其版本更改为 4.6.0,没有。尝试替换导入路径并将其设置为 packages 文件夹,没有。如果我删除它,甚至不会编译项目)。
  2. 在那个路径中是WindowsRuntime.dll什么Program Files.NetCore\v4.5\但是最新的 .NetCore 是 3.1?它包含一个WindowsRuntime.dll版本 4.0.0,为什么?

我究竟做错了什么?

0 投票
1 回答
496 浏览

wpf - 如果 .NET Core 是目标平台,我可以在 WPF 中使用 XAML 岛吗?

我想XAML Islands在面向 .NET Framework 的 WPF 项目中使用。我试图添加到我的项目中,但我无法使其工作。This article说支持WPF应用程序,但文档说:

仅在面向 .NET Core 3.x 的 WPF 和 Windows 窗体应用程序中支持使用 XAML 岛托管 WinRT XAML 控件。面向 .NET Framework 的应用程序不支持XAML 岛。

这意味着我唯一能做的就是将我的项目从 .NET Framework 迁移到 .NET Core?这将是一项巨大的工作......我还有其他使用的可能性XAML Islands吗?

0 投票
1 回答
95 浏览

c# - 如何将 XamlHost 添加到 WPF 项目?

基于这个问题,我将我的 WPF 项目(以 .NET Framework 为目标)迁移到了 .NET Core 3.1。从理论上讲,此步骤将允许用于Microsoft.Toolkit.Wpf.UI.XamlHost在我的 WPF 应用程序中托管 Windows 10 控件。

我创建了一个以 .NET Core 为目标的新 WPF 项目,并将源代码移至这个新项目并解决了所有依赖问题。

当我Microsoft.Toolkit.Wpf.UI.XamlHost通过 Nuget 包管理器安装库 (6.1.2) 时(仅在.csproj文件中添加了以下行:) <PackageReference Include="Microsoft.Toolkit.Wpf.UI.XamlHost" Version="6.1.2" />,项目可以编译但无法运行。它显示以下错误消息:

配置错误信息

当我删除库依赖项时,项目又开始了......

我认为问题不在于清单文件,因为它没有改变。那么可能是什么问题?从哪里开始搜索呢?也许与其他依赖项之一?我在哪里可以找到该应用程序事件日志?(我搜索了很多,但没有找到)。

我尝试了示例应用程序,它运行良好,所以可能有什么东西干扰了XamlHost我的项目?

0 投票
1 回答
154 浏览

c# - 无法在 C++/WinRT Xaml Islands 项目中使用来自 C# WinRT 组件的 Xaml 组件

如何复制(我们将以 Windows 终端为例):

  1. 克隆 Windows 终端存储库并获取子模块

  2. UserControl使用一些随机控件在解决方案中创建 C# Windows 运行时组件

  3. 从要托管的项目中引用 C# WinRTUserControl组件

  4. 在 Windows 终端项目之一中打开 Xaml 页面(我们将使用TerminalPage.xamlfrom TerminalAppLibproject 作为示例)

  5. 添加UserControl到该页面

  6. 编译并运行(您可能需要包含UserControltopch.h文件的生成的 Xaml 编译文件,以便在没有 Xaml 编译器错误的情况下进行编译)

  7. 你会发现应用会崩溃class not registered异常

我试过的:

  1. 使用Class Library代替WinRT Component

  2. https://a.rcad.io/csharp-in-cppwinrt

  3. https://github.com/asklar/WinRTComponent/blob/master/README.md

  4. 在文件中注册类WindowsTerminal.manifest,如下所示(我使用.dll而不是.winmd尝试使用Class Library):

  1. AppxManifest.xml在文件中手动注册类
0 投票
2 回答
103 浏览

uwp - 如何在 UWP RichEditBox 中捕获超链接点击?

我正在尝试在 UWP 自定义组件中使用 RichEditBox,该组件将通过 XamlIslands 添加到 WPF 应用程序中:

<RichEditBox x:Name="editor" PointerPressed="editor_PointerPressed" Tapped="editor_Tapped" PointerReleased="editor_PointerPressed">

我通过以下方式添加超链接:

editor.Document.Selection.Link = "\"[the link]\"";

它工作正常,当 Ctrl+单击它时它会在浏览器中打开链接,但我怎样才能捕捉到该单击事件?

我在 RichEditBox 中定义为参数的回调都不会触发,因此根本不会触发 PointerPressed、PointerReleased 和 Tapped 事件。

0 投票
1 回答
253 浏览

c# - 如何使用 XamlIslands 和桌面桥打包 WPF (.NET Core) 应用程序?

我有一个WPF目标应用程序,.NET Core v3.1我正在使用XamlIslands它来显示 Windows 10 UI 组件。为了使用XamlIslands,我必须先将我的应用程序.NET Framework.NET Core.

我将我的自定义UWP组件放入了一个UWP project目标Win10 version 2004,最小版本是1903. 在项目中,我可以使用XamlHostsWPF引用这些自定义组件。UWP

然后,我有一个Desktop Bridge项目,可以打包WPF应用程序,以便能够上传到 Microsoft Store。

该项目编译并正确运行,我什至可以运行打包项目,但是当我尝试创建一个侧面加载的应用程序包时,它给了我以下错误:

我尝试将UWP应用程序的最低版本设置为windows 10, build 10240(这是最旧的版本),但出现了相同的错误(当然,更新后的 uap 版本)。

这个答案中,我读到也许我应该创建一个.NET Standard项目?但是没有办法创建WPF应用程序定位.NET Standard

  1. 当我可以构建和运行整个解决方案时,错误消息如何表明该UWP应用程序不兼容?.netcore如果它运行,为什么不能创建一个应用程序包?
  2. 那么我如何创建一个应用程序包,我可以将其上传到商店?
0 投票
1 回答
175 浏览

c# - 如何修复 Microsoft Store 包验证错误:您无法提交预编译的 .NET Native 包?

我正在开发一个WPF应用程序,我添加了一个自定义 WinRT 组件(在 中实现UWP),我WPF通过 XamlHost 在应用程序中托管这个 win10 组件。我遵循文档的每一步,我的自定义控件是在 aUWP app project而不是 a中实现的UWP class library。该应用程序运行良好,UWP组件在WPF应用程序中正确显示。我可以创建应用程序包,但是当我上传到 Microsoft Store(.msixupload文件)时,抛出了以下错误:

预编译的 .NET Native 包是什么意思?

我还检查了示例应用程序,其中包含用于不同架构的winrthost.dll 。但是文档没有提到这一点,我还添加到我的 UWP 项目中并按照示例应用程序.csproj文件中的方式进行配置。我试图删除这个 dll 文件,但商店仍然不接受构建。

当我删除对UWP App项目的引用时,商店接受了我的构建。当我重新添加引用(不使用其中的任何组件)时,商店拒绝了。所以我认为问题出在自定义 UWP 应用程序中,但这里的预编译 .NET Native 包可能是什么?

更新:

我在解决方案中添加了一个新的空 UWP 应用项目,只需设置 XamlApplication 并从WPF应用程序中引用它。UWP 组件显示在 WPF 中(我只添加了一个绿色矩形),但是当我尝试上传到商店时,它显示了相同的错误消息。

正如文档所说,还尝试创建 UWP 类库而不是 UWP 应用程序。创建了构建并接受了商店...有什么区别?

文档说:

你也可以在上一节中创建的 UWP 应用项目中定义自定义控件。但是,出于说明目的,这些步骤在单独的类库项目中执行此操作,因为这通常是实现自定义控件以实现可移植性的方式。

因此,理论上可以发布带有托管在 UWP 应用程序中的自定义 WinRT 组件的 WPF 应用程序,对吧?那为什么商店不接受呢?

0 投票
1 回答
57 浏览

c# - 如何将 Home/End 按钮按下传播到 WPF ScrollViewer 内的 UWP RichEditBox?

WPF其中一个窗口上的应用程序(针对 .NET core 3.1)中,我有一个ScrollViewerScrollViewer(以及其他元素),我放置了一个自定义控件UWP,其中包含一个RichEditBox. 我通过以下方式添加了这个自定义 UWP 控件XamlHosts

UWP 样式的 RichEditBox 显示在 WPF 应用程序中,我可以键入文本,使用箭头按钮移动插入符号,但某些关键事件不起作用。例如,我不能使用 Home/End 按钮转到 RichEditBox 中一行的开头或结尾。

问题是,WPF 应用程序中的 ScrollViewer 会捕获这些按钮按下(Home/End/Ctrl+Right-Left)并且它不会传播到 Xaml Island RichEditBox 控件。我知道这一点,因为如果我删除 ScrollViewer,问题就会消失。

我尝试为 ScrollViewer 设置Focusable="False"IsTabStop="False",但没有帮助。KeyDownEvent我可以在 WPF 中捕获这些键盘事件,但在 XamlIsland UWP 控件中,当我按下 Home 或 End 按钮(也不是,也不是)时,根本不会触发这些事件PreviewKeyDownEvent。对于其他键,它们会被解雇。

我可以以某种方式阻止 ScrollViewer 捕获键盘事件吗?或者,当我在 WPF 中捕获它们时,我能否以某种方式在 UWP RichEditBox 上引发键盘事件?