当前位置:  开发笔记 > 后端 > 正文

可以在不编译xaml的情况下部署wpf应用程序吗?

如何解决《可以在不编译xaml的情况下部署wpf应用程序吗?》经验,为你挑选了3个好方法。

是否可以以这样的方式部署WPF Windows应用程序,以便在运行时可以操作xaml文件?如果可能的话,我认为这可以类似于可以将.aspx页面部署为内容的asp.net应用程序,然后在运行时即时编译.

我想通过编辑XAML允许在运行时编辑屏幕的简单布局.有谁知道这是否可能?

编辑:当我引用xaml文件时,我指的是与我的UIElement类相对应的xaml.换句话说,我已经使用Xaml和代码隐藏,继承,事件处理程序,程序集引用等定义了UserControl类.当部署时间到来时,我希望能够保留代码隐藏功能但仍然允许xaml要编辑.



1> Daniel Paull..:

谢谢unthinkableMayhem的参考.

松散XAML的问题在于,XamlReader在运行时调用时,无法将事件连接到程序集中的函数,也没有动态加载程序集的机制.在XAML中指定路由事件的处理程序是WPF/XAML最大的设计缺陷之一,并使松散的XAML无用.

我在XAML中嵌入动态语言运行时(DLR)脚本所做的工作对松散和编译的XAML都很有用.我的目的是通过允许在松散的XAML中提供路由事件,命令,值转换器和其他XAML/WPF概念,使松散的XAML成为WPF中的一等公民.我觉得这已经实现了(虽然我的博客没有提到动态加载程序集,但这很简单).

如果您坚持,可以部署WPF Windows应用程序,以便在运行时可以操作xaml文件.哎呀,你可以使用嵌入式脚本动态生成XAML - 无需组装.伙计,这是我长期以来最有趣的事情之一.

但要注意 - XAML中的"X"只是一个营销术语.从工程的角度来看,它是不可扩展的,所以当你走出微软设定的道路时,期待一个痛苦的世界.如果您这样做,我将很乐意为您提供帮助 - 请访问我的网站(www.thinkbottomup.com.au).

干杯,



2> Daniel Paull..:

我还有另一个建议 - 真正的问题是:

"我想通过编辑XAML来允许在运行时编辑屏幕的简单布局.有人知道这是否可行?"

答案绝对是"是"!有许多方法可以实现这一点,当然做出一些假设.

如果您不需要处理事件或在XAML的"动态"部分中编写自定义值转换器(或通常在代码中的任何其他内容),那么您只需使用XamlReader类来解析XAML文件或包含XAML的字符串.由于您只是编辑布局,我希望这些假设成立.

那么,这就是我要做的:

1)编写所有自定义控件,数据模型,值转换器等,并将它们粘贴在一个组件中.

2)加载该程序集,通过让您的应用程序引用它或动态加载它们 - 两者都可以.

3)创建一个字符串/文件/资源​​(请选择),其中包含执行布局的XAML,以及.NET命名空间到XML命名空间的映射.确保根元素上没有"x:Class"属性,因为文件后面没有代码!该字符串将使用标准WPF控件(如StackPanel)来布局自定义控件.(当然你也可以编写自定义布局控件).

4)允许用户编辑此字符串.当他们编辑它时,使用XamlReader解析文件,然后在窗口中显示生成的UIElement.

答对了!

一个问题 - 每次更改XAML时,都会抛出GUI并创建一个新GUI.如果您的GUI很安全(即使当前插入位置很重要),用户也会很快感到烦恼.这取决于你打算使用什么 - 这可能不是问题.

我希望通过更多的工作,您可以编写一个MarkupExtension,用于引用您尝试布局的部分.通过这种方式,可以在布局更改时重复使用它们.

我希望这很清楚.如果没有,请告诉我,我可以扩展这个概念 - 它会成为一个很好的博客文章.



3> TheSoftwareJ..:

不容易.WPF应用程序将编译后的XAML转换为.g.cs和.baml,然后编译成二进制文件.

当然可以创建运行时XAML编译器.这不是一件容易的事,并且真的需要思考一下为什么不把它作为一个网站!

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有