我知道可以在运行时解析一个XAML文件并创建一个UIElement,我可以将它插入到我的网页中,这里没有问题。WPF:在运行时替换页面或usercontrol的XAML(两者都可以)?
但我真正想要的是取代我的页面或usercontrol的整个XAML,也可能吗?
推理:
我想给我的应用程序的用户的机会,有应用程序运行(启动时需要年龄 - 因为一些历史遗留问题不能被缩短),并简单地更新由视图Blend中的“ctrl + s”。
我知道可以在运行时解析一个XAML文件并创建一个UIElement,我可以将它插入到我的网页中,这里没有问题。WPF:在运行时替换页面或usercontrol的XAML(两者都可以)?
但我真正想要的是取代我的页面或usercontrol的整个XAML,也可能吗?
推理:
我想给我的应用程序的用户的机会,有应用程序运行(启动时需要年龄 - 因为一些历史遗留问题不能被缩短),并简单地更新由视图Blend中的“ctrl + s”。
这取决于您是附加事件处理程序还是使用“Name”或“x:Name”属性来访问代码中的UI元素。
尼斯纯MVVM应用
首先让我们假设你有一个使用绑定和专门命令一个不错的纯MVVM应用程序,这样你就不会使用命名UI元素或代码隐藏事件处理程序。对你有好处:你有一个非常干净的应用程序架构,我喜欢你。
在这种情况下,所有你需要做的就是创建XAML文件的临时副本与x:Class属性去掉,并呼吁:
Application.LoadComponent(this, uriToTemporaryCopy);
丑陋的不纯的非MVVM应用
现在让我们假设你使用了一个名为x的元素:你的代码后面的名字或者名字(淘气,淘气,淘气!),或者你使用XAML附加了一个事件处理器(不太淘气但不是纯粹的)。你没有一个漂亮的干净的建筑,但我仍然喜欢你。
在这种情况下,Application.LoadComponent不会自行完成,因为这些设置需要与代码隐藏进行集成。您还需要找到调用BAML编译器的方法。
由于代码隐藏的整合已经编译到您的网页或用户控件的子类,有一些限制:
如果遵守这些规则,通常将合并到您的类中的生成代码不会更改,因此您可以加载新的XAML将文件转换为正在运行的应用程序而不会破坏任
的程序是:
在已编译的.csproj项目中,任何已编译的BAML文件都将在obj/debug或obj/release目录下找到,扩展名为.baml。如果您直接调用标记编译器任务,则可以决定输出位置。
什么是BAML文件?
对于那些不知道的人来说,BAML基本上是一个压缩和优化的XAML二进制形式,并且是您的XAML存储在.exe或.dll中的方式。它还具有直接链接到XAML没有的生成代码的功能。
谢谢! :-) 我的应用程序是纯MVVM,因为我不喜欢背后的代码。 :-D – StormianRootSolver 2010-06-25 08:51:25