2017-12-14 4 views
1

Zunächst ist es ein Dokument-basierte VSTO-Projekt (so dass diese Add-In VSTO Walkthroughs nicht wirklich funktionieren).VSTO Übergabe von Variablen an ActionPane und WPF usercontrol/ElementHost

Ich konnte ein ActionPaneControl erstellen und war in der Lage, ein WPF Benutzersteuerelement mit ElementHost hinzuzufügen. -Code starten Sie es wie folgt:

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

Allerdings bin ich versucht, einen Parameter in die WPF Usercontrol zu übergeben. dann merke ich, dass es keinen Platz im Code gibt, der die WPF-Benutzersteuerung in diesem Code anzeigt. Meine Vermutung ist, dass es etwas mit dem ElementHost zu tun hat.

Kann mir bitte jemand helfen?

Danke

EDIT: Hier ist die Klasse ActionPaneControl1 ist

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(); 
     ..... 
    } 

Antwort

0

Sie die WPF Usercontrol durch die ElementHost zugreifen können.

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

Danke Chris. Bitte sehen Sie sich meinen bearbeiteten Beitrag an. Wo gebe ich deinen Code ein? – Heisenberg

+0

Der Konstruktor für 'ActionsPaneControl1'. – Chris

+0

uh .... es sagt, dass ActionPaneControl1 bereits ein Mitglied ProjectName namens '.ctor' mit den gleichen Parametertypen definiert ... Ich denke, es hat etwas mit partiellen Klassen zu tun? – Heisenberg

1

Danke für Chris Antwort, die die Lösung auf meinem Ende inspiriert hat. Hier ist der Code. Sie können die Zeichenfolge x in alles ändern, was Sie möchten.

In der WPF setzen diese

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

in den ActionPaneControl1.cs, setzen Sie diese

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

    } 
} 

und letzten Schritt wird die folgende in den ActionPaneControl1.Designer.cs

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

Sie sollten * .Designer.cs nicht direkt ändern, da sollte ein Kommentar drin stehen, der genau das sagt. Es wird neu generiert, wenn Sie die Benutzeroberfläche mit dem Designer ändern. Sie müssen es sowieso nicht in 'InitializeComponent' übergeben, Sie können darauf zugreifen, sobald es sich in' ActionsPaneControl1.cs' befindet. Ich denke, die Wurzel des Missverständnisses in meiner Antwort war, dass du nicht bemerkt hast, dass du mit der rechten Maustaste auf das Steuerelement klicken und "Code anzeigen" drücken kannst. Sie sollten Ihren gesamten benutzerdefinierten Code dort tun. – Chris

Verwandte Themen