我对WPF + MVVM + ElementHost有一些疑问。我尽力解释清楚。
我正在构建一个插件(VSTO 2010),这意味着我需要一个ElementHost来托管WPF。
第一个意思是我的WPF只能是UserControl(WPF)
关于第1点和第2点;
可以像这样One构建一个具有Popup(Children)的MVVM WPF(UserControl),它可以托管到ElementHost中吗?
我希望我的问题足够明确!谢谢你的帮助。
答案 0 :(得分:4)
你确定可以,虽然有一些问题。
我的WPF控件在最初显示时没有绘制时遇到问题,所以我通过在设置Child时调整宽度来解决这个问题。见http://vstocontrib.codeplex.com/SourceControl/changeset/view/50a83624e34d#src%2fVSTOContrib.Core%2fWpf%2fWpfPanelHost.cs
接下来是你要构建的MVVM样式应用程序,围绕这个的主要问题是围绕windows / documents / custom任务窗格的VSTO模型都是不同的,一个是基于打开的工作簿(context),一个是windows(视图)和自定义任务窗格也是基于窗口的(视图)。 MVVM风格的应用程序是围绕当前上下文或当前打开的工作簿构建的,我一直在研究VSTO contrib一段时间来解决这个问题,如果你需要功能区支持,它甚至会在声明你的RibbonXML色带时为你提供类似MVVM的绑定。 抓住它http://vstocontrib.codeplex.com,如果确实对你有帮助,请告诉我。
最后弹出窗口,没有什么可以阻止你,但你会在Office 2007中发现,当你试图第二次打开窗口时Office可能会崩溃。以下代码将使您的WPF窗口体验更加顺畅。
if (System.Windows.Application.Current == null)
new Application { ShutdownMode = ShutdownMode.OnExplicitShutdown };
else
System.Windows.Application.Current.ShutdownMode = ShutdownMode.OnExplicitShutdown;
基本上当你显示第一个窗口时,一切都很好,但WPF会启动一个应用程序,默认情况下在最后一个窗口关闭时会退出。因此当你的窗口关闭时,你会再次尝试打开它,WPF会爆炸:P