问题标签 [baml]

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 投票
0 回答
123 浏览

wpf - 在没有 WPF 的程序集中嵌入 BAML

我想将编译后的 XAML 作为 BAML2006 嵌入到程序集中。

如果选择了Embedded Resource MSBuild 操作,XAML 文件将作为文本资源嵌入到程序集中,可以像任何其他松散 XAML 资源一样进行读取。但是,松散的 XAML 在涉及到引用的命名空间时有一些严重的限制,最严重的是,在解析松散的 XAML 之前,[XmlnsDefinitionAttribute]必须将其引用的任何命名空间加载到 中。AppDomain相反,嵌入式 BAML 不受此影响,因为包含命名空间的程序集被添加到引用的程序集列表中,并AppDomain在任何代码开始运行之前由自动加载。

如果选择了Page MSBuild 任务,XAML 将“编译”到 BAML2006 中并嵌入到.resources.g包含程序集的 。但是,如果未引用 和 程序集,编译WindowsBase将失败PresentationCodePresentationFramework由于我正在开发一个使用 XAML 但不使用 WPF 的项目(我们使用XamlObjectWriter自定义标记扩展加载对象图,但重用 Visual Studio 的一些 XAML 编辑器基础结构以支持 IntelliSense),我想避免依赖这些库。

有没有办法让 MSBuild 嵌入 BAML 并添加所需的程序集引用而不依赖于 WPF?

我猜 Workflow Foundation 使用了类似的方法,但我一直无法找到任何信息。

0 投票
1 回答
141 浏览

wpf - 将 Baml 文件转换为可用的 XDocument 进行解析

我希望能够针对 Xaml 编写单元测试以查找不正确的模式。我们遇到的问题是 Xaml 仍然有效,并且可以正常编译和“工作”,但可能会导致隐藏问题或缺乏一致性。为了帮助解决这个问题,我们想针对文件编写单元测试。

一个简单的例子:如果您定义了一个网格并且网格列绑定到底层对象上的一个数字字段,那么网格的列标题应该具有符合我们内部标准的适当的右对齐模板。离开定义的模板将产生一个左对齐的列标题,除了我们的内部标准之外,它并没有真正破坏任何东西。鉴于这基本上是 xml,我应该能够轻松地编写一个询问 xml 元素的测试,检测数字列的存在并检查以确保该文件还定义了一个右对齐的标题模板。这样我就不必依赖开发人员或 QA 来涵盖像这样容易测试的东西。

我可以在单元测试过程中访问程序集,并且可以通过读取清单资源流来访问所有 baml 资源文件。但是我不知道如何将它们读入一种有用的格式,我可以将其加载到 XDocument 之类的东西中进行解析和阅读。有人做过吗?我试过使用 Baml2006Reader 等......但没有任何成功。

0 投票
0 回答
68 浏览

c# - 为什么 Xaml 在运行时反序列化 - 而不是在编译时?

在 WPF 中,xaml 文件被编译成称为 baml 的二进制格式。在编译时,名为“PresentationBuildTasks”的工具会生成一个代码隐藏部分类,其中包含用于加载资源 (.baml) 并设置内部属性和事件的逻辑:

这是我的简化 xaml:

生成的代码隐藏方法:

那么为什么 wpf 首先需要从 xaml 生成代码隐藏,然后在运行时加载 baml?如果它像这样在编译时生成整个方法,会不会更高效:

目前这行不通,但为什么 wpf 不采用这种方法?谢谢;

0 投票
1 回答
47 浏览

wpf - 为什么将 TextBlock.FontSize 转换为二进制 (BAML) 中的附加属性?

此 XAML 源:

根据 ILSpy 编译为 BAML:

我可能错了,但 BAML 版本似乎使用附加属性语法而不是属性语法(例如用于Margin)。

我发现:

这可能与MSDN有点矛盾:

  • 此依赖属性还具有附加属性用法。在 XAML 中,用法是 <object TextBlock.FontSize="value".../>,其中 object 是包含在 TextBlock [...] 中的对象元素(通常是流元素)。

BAML中的这种语法差异MarginFontSize赋值的正确解释是什么?

0 投票
1 回答
84 浏览

c# - 如何在编译的代码中动态创建图形元素(.NET 5)?

XAML 项目文件被编译成 XAML 代码的二进制表示 - 二进制应用程序标记语言 (BAML)。然后将 BAML 代码作为资源嵌入到应用程序的最终程序集中 - exe 或 dll 文件。它涉及 XAML。但是,在应用程序运行时在 C# 代码 (!) 中创建的图形元素呢?

假设应用程序是一个空窗口:

此 XAML 被编译为可执行资源。

在鼠标事件中,我添加了新按钮 - 是一个图形元素,在构建应用程序期间它没有被编译成 BAML:

在这方面,问题是:当我在应用程序运行时在 C# 代码(不是 XAML 代码)中创建图形项(按钮)时,技术上会发生什么?它是在写入由 BAML 创建的共享资源,还是在创建自己的 JIT 已经在读取的临时资源?谢谢