0

我已经实现了 MAF 框架,创建了一个管道和一个 AddIn,它发送一个

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

UserControl到我的主机,它本身就是一个插件。

要发送到主机的控件编写如下,它实现UserControl并包含一个附加的字符串属性:

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

主机加载加载项和请求的 UI。我可以调用方法,但我无法将我的AddInUI 对象显示到我的主机容器中:

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

除非我把它放在一个单独的窗口中 new Window { Content = TestSuiteUicontainer }.Show();

或者即使我将洞插件视图放在单独的窗口中。

我的插件正在显示除UserControl我的 AddIn ui 对象之外的所有对象。

这是我的 Hostside TestSuiteUi 合同

查看适配器:

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

1 回答 1

0

如果有人遇到同样的问题,这是在 msdn 论坛中找到的答案:http: //social.msdn.microsoft.com/Forums/vstudio/en-US/cd30e928-31c8-4352-b86a-c6bcd64a3192/addin-apperence-问题-wpf?forum=wpf

于 2014-02-27T13:31:59.073 回答