Frage

Ich habe das MAF-Framework implementiert und eine Pipeline und ein AddIn erstellt, das a sendet

<!-- language-all: lang-cc -->

UserControl zu meinem Host, der selbst ein Plugin ist.

Die an den Host zu sendende Steuerung wird wie folgt geschrieben und implementiert UserControl und enthält eine zusätzliche String-Eigenschaft:

Contract : public interface ITestSuiteUiContract : INativeHandleContract  
AddInViews : public class TestSuiteUi : UserControl
HostViews :  public abstract class AbstractTestSuiteUi : UserControl

Der Host lädt das AddIn und die angeforderte Benutzeroberfläche.Ich kann Methoden aufrufen, aber ich kann meine nicht anzeigen AddIn UI-Objekt in meinen Host-Container:

ViewModel: TestSuiteUiContainer = _TestSuiteLoader.LoadedTestSuite.GetTestSuiteWpfUiObjects()[0];`  
View : `<ContentControl Content="{Binding TestSuiteUiContainer}"/> 

es sei denn, ich füge es in ein separates Fenster einnew Window { Content = TestSuiteUicontainer }.Show();

oder sogar, wenn ich die gesamte Plugin-Ansicht in ein separates Fenster lege.

Mein Plugin zeigt alles an UserControl Objekte außer meinem AddIn-UI-Objekt.

Hier ist mein Hostside TestSuiteUi-Vertrag

Adapter anzeigen:

public TestSuiteUiContractToViewAdapter(TestSuiteUiContract contract)
{
    _contract = contract;
    _handle = new ContractHandle(_contract);
    string aqn = typeof(INativeHandleContract).AssemblyQualifiedName;
    INativeHandleContract inhc = (INativeHandleContract)SourceContract.QueryContract(aqn);
    FrameworkElement fe = (FrameworkElement)FrameworkElementAdapters.ContractToViewAdapter(inhc);
    this.Content = fe;
}

Und hier ist die von meinem AddIn zurückgegebene Liste:

public List<AbstractTestSuiteUi> GetTestSuiteWpfUiObjects()
{
    var list = new List<AbstractTestSuiteUi>();
    for (int i = 0; i < SourceContract.GetTestSuiteWpfUiObjects().GetCount(); i++)
    {
        list.Add(Adapt.ToView<ITestSuiteUiContract, AbstractTestSuiteUi, TestSuiteUiContractToViewAdapter>(SourceContract.GetTestSuiteWpfUiObjects().GetItem(i)));
    }
    return list;
}

Hier sind Methoden, die zu meinem hinzugefügt wurden

TestSuiteUiViewTocontractAdapter:
    public override IContract QueryContract(string contractIdentifier)
    {
        if (contractIdentifier.Equals(typeof(INativeHandleContract).AssemblyQualifiedName))
        {
            return FrameworkElementAdapters.ViewToContractAdapter(this.SourceView);
        }
        return base.QueryContract(contractIdentifier);
    }

    [SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]
    public IntPtr GetHandle()
    {
        return FrameworkElementAdapters.ViewToContractAdapter(this.SourceView).GetHandle();
    }
War es hilfreich?

Lösung

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top