Не удается отобразить объект пользовательского интерфейса MAF на моем хосте

StackOverflow https://stackoverflow.com//questions/22040696

  •  21-12-2019
  •  | 
  •  

Вопрос

Я реализовал фреймворк MAF, создав конвейер и надстройку, которая отправляет

<!-- language-all: lang-cc -->

UserControl к моему хостингу, который сам по себе является плагином.

Элемент управления, который должен быть отправлен на хост, записан, как показано ниже, он реализует UserControl и содержит дополнительное строковое свойство:

Contract : public interface ITestSuiteUiContract : INativeHandleContract  
AddInViews : public class TestSuiteUi : UserControl
HostViews :  public abstract class AbstractTestSuiteUi : UserControl

Хост загружает надстройку и запрошенный пользовательский интерфейс.Я могу вызывать методы, но я не могу отобразить свой AddIn Объект пользовательского интерфейса в моем хост-контейнере:

ViewModel: TestSuiteUiContainer = _TestSuiteLoader.LoadedTestSuite.GetTestSuiteWpfUiObjects()[0];`  
View : `<ContentControl Content="{Binding TestSuiteUiContainer}"/> 

если только я не помещу это в отдельное окно new Window { Content = TestSuiteUicontainer }.Show();

или даже если я помещу просмотр плагина hole в отдельное окно.

Мой плагин отображает все UserControl Объекты, за исключением моего добавляемого объекта пользовательского интерфейса.

Вот мой тестовый набор на стороне хоста, с которым я заключаю контракт на

адаптер просмотра :

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;
}

И вот список, возвращенный моим добавлением:

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;
}

Вот методы, добавленные в мой

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();
    }
Это было полезно?

Решение

На случай, если кто-то столкнется с такой же проблемой, вот ответ, найденный на форуме msdn :http://social.msdn.microsoft.com/Forums/vstudio/en-US/cd30e928-31c8-4352-b86a-c6bcd64a3192/addin-apperence-issuein-wpf?forum=wpf

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top