No puedo mostrar el objeto MAF ui en mi host
Pregunta
Implementé MAF Framework, creando una canalización y un complemento que envía un
<!-- language-all: lang-cc -->
UserControl
a mi host, que es un complemento en sí mismo.
El control que se enviará al host se escribe como se muestra a continuación, implementa UserControl
y contiene una propiedad de cadena adicional:
Contract : public interface ITestSuiteUiContract : INativeHandleContract
AddInViews : public class TestSuiteUi : UserControl
HostViews : public abstract class AbstractTestSuiteUi : UserControl
El host carga el complemento y la interfaz de usuario solicitada.Puedo llamar a métodos, pero no puedo mostrar mi AddIn
Objeto UI en mi contenedor host:
ViewModel: TestSuiteUiContainer = _TestSuiteLoader.LoadedTestSuite.GetTestSuiteWpfUiObjects()[0];`
View : `<ContentControl Content="{Binding TestSuiteUiContainer}"/>
a menos que lo ponga en una ventana separadanew Window { Content = TestSuiteUicontainer }.Show();
o incluso si coloco la vista completa del complemento en una ventana separada.
Mi complemento muestra todo UserControl
Objetos excepto mi objeto AddIn ui.
Aquí está mi contrato Hostside TestSuiteUi para
ver adaptador:
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;
}
Y aquí está la lista devuelta por mi complemento:
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;
}
Aquí hay métodos agregados a mi
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();
}
Solución
En caso de que alguien se enfrente al mismo problema, aquí está la respuesta que se encuentra en el Foro de MSDN: http://social.msdn.microsoft.com/forums/vstudio/en-us/CD30E928-31C8-4352-31C8-4352-B86A-C6BCD64A3192/DINDIN-APPERENCIENDY-ICEIN-WPF?forum=WPF