2011-05-22 35 views
1

我有一些關於WPF + MVVM + ElementHost的問題。我盡力解釋清楚,我可以。如何設計MVVM UserControl WPF並將其託管到Windows Forms ElementHost中?

  1. 我正在構建一個插件(VSTO 2010),這意味着我需要一個ElementHost來託管一個WPF。

  2. 第一點意味着我的WPF只能是一個用戶控件(WPF)

  3. 關於點1和2;

    可以構建一個MVVM WPF(UserControl),其中包含Popup(Children)這樣的One,並且可以將其託管到ElementHost中?

我希望我的問題已經夠清楚了!感謝你的幫助。

回答

4

你當然可以,但有幾個問題。

我的WPF控件在初始顯示時沒有畫圖,所以我在設置Child時通過調整寬度來解決它。見http://vstocontrib.codeplex.com/SourceControl/changeset/view/50a83624e34d#src%2fVSTOContrib.Core%2fWpf%2fWpfPanelHost.cs

下一步是要構建MVVM風格的應用程序,解決這個問題的主要問題是圍繞Windows /文件/自定義任務窗格的VSTO模型都不同,一個是基於打開的工作簿(上下文),一個是窗口(視圖)和自定義任務窗格也是基於窗口(視圖)。 MVVM樣式的應用程序是圍繞當前上下文或當前打開的工作簿構建的,我一直在研究VSTO contrib以解決此問題,它甚至在爲RibbonXML功能區聲明RibbonForm時會爲您提供類似綁定的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

+0

我看到你的Codeplex項目,但我不知道如何使用它!我只想構建一個可以託管到VSTO面板的MVVM WPF。你能告訴我,我可以做到這一點嗎?謝謝你! – trouble 2011-05-23 02:27:37

+0

如果您下載源代碼,有幾個示例項目可用。 你沒有提到你的目標是什麼辦公室產品,但有一個展望和一個文字示例項目,這將使你開始。 – 2011-05-26 03:35:27

+0

看看http://vstocontrib.codeplex.com/SourceControl/changeset/view/50a83624e34d#src%2fDemoProjects%2fTwitterFeedDemo%2fTwitterFeedCore%2fTwitterFeed%2fContactFeed.cs – 2011-05-26 03:38:43

相關問題