2016-04-27 7 views
2

Ich habe ein VSTO Addin (keine Template-Projekt), und ich mag das Eingabe Ereignis für alle Inhalte Kontrollen manuell zu dem Dokument hinzugefügt binden, aber kann nicht herausfinden, wie man die Bindung macht.VSTO/WinWord Binden an Ereignisse Eintreten für DropDownListContentControl

Es ist leicht genug, um die entsprechenden Inhaltssteuerelementen zu finden:

ActiveDoc.ContentControls.Cast<ContentControl>() 
    .Where(cc => cc.Type == WdContentControlType.wdContentControlDropdownList) 

Content keine Ereignisse überhaupt, so ist es, wie ich scheint erhalten müssen irgendwie einen DropDownListContentControl aber ich haven‘ Ich habe herausgefunden, wie man das vom ContentControl oder einer anderen Quelle bekommt.

  • Sie können ContentControl nicht einfach auf DropDownListContentControl übertragen, da keine gemeinsamen Eltern vorhanden sind.
  • Ich dachte, ich könnte mit dynamische finden, aber diese Ereignisse nicht unterstützen.
  • In Vorlage Projekte ContentControls werden mit Globals.Factory.CreateDropDownListContentControl erstellt, aber das scheint nicht für Addin-Projekte zu funktionieren.
  • Ich vermute, es gibt etwas Einfaches, das ich vermisse, aber die Stunden des Googelns waren bisher fruchtlos.

    TIA

    Antwort

    1

    Ich glaube, ich habe einfach nicht lange genug aussehen. Um es machen müssen Sie Ihre Microsoft.Office.Interop.Word.Document in einer verwechslungs namens wickeln Microsoft.Office.Tools.Word.Document mit diesem:

    Microsoft.Office.Tools.Word.Document doc 
        = Globals.Factory.GetVstoObject(Addins.Globals.Application.ActiveDocument); 
    

    Diese Klasse eine Reihe von Methoden, die einen Wrapper mit mehr Ereignisse als die native Steuerelemente generieren. So ein Ereignis zu bekommen auf jeder Droplist, tun Sie so etwas wie:

     Microsoft.Office.Tools.Word.Document doc = Globals.Factory.GetVstoObject(ActiveDoc); 
         foreach (ContentControl cc in ActiveDoc.ContentControls) { 
          if (cc.Type == WdContentControlType.wdContentControlDropdownList) { 
           var dropList = doc.Controls.AddDropDownListContentControl("MyControl"); 
           dropList.Tag = "MyControl"; 
           dropList.Entering += (sender, args) => { 
            var that = (DropDownListContentControl) sender; 
            Debug.Print("Entering: " + that.Tag); 
           }; 
          } 
         } 
    

    Das ist alles dort ist zu ihm, andere als die Kontrollen selbst ziemlich schrecklich sind aus Usability-Sicht.

    Siehe Host Items and Host Controls Overview.

    0
    Document extendedDocument = Globals.Factory.GetVstoObject(Application.ActiveDocument); 
    int nIdx=0; 
    foreach(Word.ContentControl ctrl in Application.ActiveDocument.ContentControls) 
    { 
    ContentControl newCC = 
    
    extendedDocument.Controls.AddContentControl(ctrl, "contentControlName"+nIdx.ToString()); 
        newCC.Entering += new ContentControlEnteringEventHandler(enteringEventHanlder); 
        nIdx++; 
    } 
    

    Es ist Code, der native Inhaltskontrolle auf Inhaltskontrolle umsetzt. hilft es dir vielleicht.

    +0

    Cool, danke. Ich habe festgestellt, dass ich Inhaltskontrollen meistens hasse, weil ihre Benutzererfahrung schrecklich ist, aber ich muss sie gelegentlich machen, also ist dies ein nützlicher Tipp. –

    Verwandte Themen