2017-12-14 20 views
1

まず、ドキュメントベースのVSTOプロジェクトです(これらのアドインVSTOウォークスルーは実際には機能しません)。VSTOはActionPaneとWPF usercontrol/ElementHostに変数を渡します。

ActionPaneControlを作成することができ、ElementHostを使用してWPFユーザーコントロールを追加することができました。以下のようにそれを起動する コード:

ActionsPaneControl1 apc = new ActionsPaneControl1();    
Globals.ThisWorkbook.ActionsPane.Controls.Add(apc); 
Globals.ThisWorkbook.ActionsPane.Visible = true; 

しかし、私は、WPFのユーザーコントロールにパラメータを渡すためにしようとしています。コード内にこのコードのWPFユーザーコントロールを示す場所がないことを認識しています。私の推測では、それはElementHostと関係があるということです。

誰でも助けてください。

はあなたに

EDITありがとう: はここにあなたがElementHostを通じてWPFユーザーコントロールにアクセスすることができActionPaneControl1クラス

partial class ActionsPaneControl1 
{ 
private System.ComponentModel.IContainer components = null; 
..... 
private void InitializeComponent() 
    { 
     this.elementHost1 = new 
     System.Windows.Forms.Integration.ElementHost(); 
     this.elementHost2 = new 
     System.Windows.Forms.Integration.ElementHost(); 
     this.ucWPF1 = new SWAPAEMonthlyReview.ucWPF(); 
     ..... 
    } 

答えて

0

です。

public ActionsPaneControl1() 
{ 
    InitializeComponent(); 
    if (elementHost1.Child != null) 
    { 
    var wpfControl = elementHost1.Child as WpfUserControlClassName; 
    } 
} 
+0

Chrisさんありがとうございます。私の編集された記事をご覧ください。どこにコードを入れますか? – Heisenberg

+0

'ActionsPaneControl1'のコンストラクタです。 – Chris

+0

uh .... ActionPaneControl1は既に同じパラメータタイプの '.ctor'という名前のメンバProjectNameを定義していると言っています...私はそれが部分クラスとは何か関係があると思いますか? – Heisenberg

1

私の最後の解決策にインスピレーションを与えたChrisの応答に感謝します。 ここにコードがあります。文字列xを任意のものに変更できます。

WPFでActionPaneControl1.csにこの

public ucWPF(string x) 
    { 
     InitializeComponent(); 
     //do whatever with x 
    } 

を入れ、ActionPaneControl1.Designer.csに次のように編集するには、この

partial class ActionsPaneControl1 : UserControl 
{ 
    public ActionsPaneControl1(string x) 
    { 
     InitializeComponent(x); 

    } 
} 

と最後のステップをされて置く

public void InitializeComponent(string x) 
    { 
     ............ 
     this.ucWPF1 = new SWAPAEMonthlyReview.ucWPF(x);  
     ....... 
    } 
+0

* .Designer.csを直接変更するべきではありません。その中に正確に記述するコメントが必要です。デザイナーでUIを変更すると再生成されます。あなたは 'InitializeComponent'にそれを渡す必要はありません。あなたが' ActionsPaneControl1.cs'にあるとすぐにそれにアクセスすることができます。私の答えでの誤解の根源は、あなたがコントロールを右クリックして 'View Code'を打つことができなかったことに気づいていなかったことです。カスタムコードはすべてそこで実行してください。 – Chris

関連する問題