Impossibile visualizzare l'oggetto Ui MAF nel mio host
Domanda
Ho implementato il quadro MAF, creando una pipeline e un addin che invia un
<!-- language-all: lang-cc -->
.
UserControl
al mio host che è un plugin stesso.
Il controllo da inviare all'host è scritto come di seguito, implementa UserControl
e contiene una proprietà stringa aggiuntiva:
Contract : public interface ITestSuiteUiContract : INativeHandleContract
AddInViews : public class TestSuiteUi : UserControl
HostViews : public abstract class AbstractTestSuiteUi : UserControl
.
L'host carica l'addin e l'interfaccia utente richiesta.Posso chiamare i metodi, ma non riesco a visualizzare il mio oggetto UI AddIn
nel mio contenitore host:
ViewModel: TestSuiteUiContainer = _TestSuiteLoader.LoadedTestSuite.GetTestSuiteWpfUiObjects()[0];`
View : `<ContentControl Content="{Binding TestSuiteUiContainer}"/>
.
A meno che non lo metti in una finestra separata
new Window { Content = TestSuiteUicontainer }.Show();
o anche se metto la vista del plugin del foro in una finestra separata.
Il mio plugin sta visualizzando tutti gli oggetti UserControl
EXEPT Il mio oggetto Addin UI.
Ecco il mio hostside TestSuiteui Contratto a
Visualizza adattatore:
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;
}
.
Ed ecco l'elenco restituito dalla mia aggiunta:
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;
}
.
Ecco i metodi aggiunti al mio
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();
}
. Soluzione
Nel caso in cui qualcuno affronta lo stesso problema, ecco la risposta trovata nel forum MSDN: http://social.mssdn.microsoft.com/forums/vstudio/en-us/cd30e928-31c8-4352-F86A-C6BCD64A3192/ADDIN-APRERENCE-ISSUEIN-WPF?form=WPF
.