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();
    }
¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top