Das MAF-UI-Objekt kann auf meinem Host nicht angezeigt werden
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();
}
Lösung
Falls jemand das gleiche Problem hat, finden Sie hier die Antwort im MSDN-Forum:http://social.msdn.microsoft.com/Forums/vstudio/en-US/cd30e928-31c8-4352-b86a-c6bcd64a3192/addin-apperence-issuein-wpf?forum=wpf