我决定将我的一些UI生成卸载到我的后端,并将其流式传输到客户端。这将允许我在不重新部署客户端的情况下进行一些UI更改。
应该是直截了当的。在服务器端:
string controlToStream = XamlWriter.Save(rootControl);
并在客户端:
var stringReader = new StringReader(value);
var xmlTextReader = new XmlTextReader(stringReader);
var control = XamlReader.Load(xmlTextReader);
但是如何在服务器上访问WPF而不在链中引入完整的WPF应用程序?服务器代码是典型的RPC类型代码块,每次请求进入时都会执行。有没有办法在控制台应用程序中轻量级访问XAML /控件创建?
谢谢!
解决方案更新以供将来参考:
在控制台应用中添加对WPF dll(PresentationCore,Windowsbase,PresentationFramework,System.Xaml)的引用
确保只从STA线程调用它们。 ParallelExtensionsExtras中的StaTaskScheduler派上用场:http://blogs.msdn.com/b/pfxteam/archive/2010/04/07/9990421.aspx
答案 0 :(得分:1)
我不确定您认为“轻量级”到底是什么,但您可以从控制台应用程序访问所有WPF库。
如果由于某种原因不想使用它们,可以将XAML视为普通XML,并仅使用XML库来生成它。虽然这很可能会更多的工作。