|
1
|
| StormianRootSolver · 技术社区 · 16 年前 |
|
|
1
3
这取决于是附加事件处理程序还是使用“Name”或“x:Name”属性从代码中访问UI元素。 很好的纯MVVM应用程序 首先,假设您有一个很好的纯MVVM应用程序,它专门使用绑定和命令,所以您不使用命名UI元素或代码隐藏事件处理程序。对你有好处:你有一个干净的应用程序架构,我喜欢你。 在这种情况下,您只需创建一个XAML文件的临时副本,删除x:Class属性,然后调用:
现在让我们假设您使用了一个名为x:Name的元素,或者使用了代码中的Name(调皮,调皮,调皮!),或者您使用XAML附加了一个事件处理程序(不那么顽皮,但也不纯粹)。你的建筑不干净,但我还是喜欢你。 在这种情况下,Application.LoadComponent本身无法完成这一任务,因为这些设置需要与代码后面的集成。您还需要找到一种方法来调用BAML编译器。 由于代码隐藏集成已经编译到页面或UserControl子类中,因此有一些限制:
如果您遵守这些规则,那么生成的代码通常不会更改,因此您可以将新的XAML文件加载到正在运行的应用程序中,而不会破坏任何内容。
在已编译的.csproj项目中,任何已编译的BAML文件都将位于扩展名为.BAML的obj/debug或obj/release目录下。如果直接调用标记编译器任务,则可以决定输出位置。 什么是BAML文件? 对于那些不知道的人来说,BAML基本上是XAML的一种压缩和优化的二进制形式,是XAML存储在.exe或.dll中的方式。它还具有直接链接到生成的代码的功能,而XAML没有这种功能。 |