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();
    }
.

È stato utile?

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

.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top