c# - DLL 上的嵌入式 Xaml 页面

标签 c# xaml windows-8 windows-runtime winrt-xaml

我正在使用新的 Metro Design (WinRT) 开发一些 UI 组件,以便将它们提供给第三方公司。 我们在部署控件包时遇到一些问题。 当他们在新项目上引用我们的控件生成的.dll 文件时,他们可以访问所有对象并实例化它们,但在编译时,会出现以下类型的错误:

“有效负载文件'...\bin\Debug\Charts\Line\Line.xaml'不存在。”。 (如果我们提供/bin .dll)

或者

Windows.UI.Xaml.Application.LoadComponent(Object component, Uri resourceLocator, ComponentResourceLocation componentResourceLocation) 处的 XamlParseException (如果我们使用/obj 文件夹中的 .dll)

我们知道“解决此问题的方法是向客户部署/提供 xaml”文件以及 .dll,但我们确实希望避免显示我们的 XAML 代码。

提前致谢

异常

最佳答案

XAML 文件在 Windows 8 WinRT/XAML 中是松散文件,因此如果您想使用将 XAML 和后台代码绑定(bind)在一起的内置工具,则必须共享 XAML 文件。

您可能想阅读 Tim Heuer 关于构建可部署控件的文章 here 。他提到了两种共享控件的方法 - 使用 VS Extensions SDK(将它们安装到 Visual Studio 中)或作为 NuGet 包(您可以共享 NuGet 包)。这样,当您第一次查看共享的组件时,这些文件将不可见,尽管它们将包含在项目文件夹中,因此如果有人仔细观察 - 他们将看到您的 XAML。

您似乎想要避免的替代方案是将 dll + xaml 文件共享为仅放入项目中的文件。您需要将 xaml 文件放入与 dll 同名的文件夹中(不带文件扩展名),以便工具能够找到它们。只是使用这些工具的替代方案。

如果您查看从商店安装的应用程序 - 您可以看到它们附带的所有 XAML 文件。目前,除了编写大量代码以某种方式将 XAML 嵌入到二进制文件中或用隐藏代码替换它之外,没有什么好的选择。

关于c# - DLL 上的嵌入式 Xaml 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13163832/

相关文章:

c# - WPF 绑定(bind)到组合框

c# - C#-如何处理空用户输入?

c# - 如何为派生类实现 INotifyPropertyChanged?

file-io - 在 Metrostyle 应用程序中读取 XML 文件?可能的?

c# - 带有 Cosmos 的 EF Core 5.0 - 新属性和支持字段

c# - linq to sql返回 bool 值

c# - 使屏幕阅读器可以访问 WPF 应用程序

silverlight - 绑定(bind)到 Silverlight XAML 中的 SystemColors

javascript - 在 Windows 8 Javascript 应用程序中将 XML 的字符串表示形式转换为 XML DOM 对象

c# - 返回开始页面后 Windows 应用商店应用程序崩溃