VSTO将变量传递给ActionPane和WPF usercontrol / ElementHost

时间:2017-12-14 23:13:26

标签: c# wpf vsto elementhost

首先,它是一个基于文档的VSTO项目(因此那些附加的VSTO演练实际上并不起作用)。

我能够创建一个ActionPaneControl并且能够使用ElementHost在其中添加WPF用户控件。 启动它的代码如下:

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

但是,我试图将参数传递给WPF用户控件。然后我意识到代码中没有地方指示此代码中的WPF用户控件。我的猜测是它与ElementHost有关。

有人可以帮忙吗?

谢谢

编辑: 这是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();
      .....
     }

2 个答案:

答案 0 :(得分:1)

感谢克里斯的回应,这启发了我的解决方案。 这是代码。您可以将字符串x更改为您想要的任何内容。

在WPF中放了这个

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

在ActionPaneControl1.cs中,把这个

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

    }
}

,最后一步是在ActionPaneControl1.Designer.cs中编辑以下内容

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

答案 1 :(得分:0)

您可以通过ElementHost

访问WPF UserControl
public ActionsPaneControl1()
{
  InitializeComponent();
  if (elementHost1.Child != null)
  {
     var wpfControl = elementHost1.Child as WpfUserControlClassName;
  }
}