我已经实现了MAF框架,创建了一个管道和一个发送
的AddIn<!-- language-all: lang-cc -->
UserControl
到我的主机,这是一个插件本身。
要发送到主机的控件如下所示,它实现UserControl
并包含一个额外的字符串属性:
Contract : public interface ITestSuiteUiContract : INativeHandleContract
AddInViews : public class TestSuiteUi : UserControl
HostViews : public abstract class AbstractTestSuiteUi : UserControl
主机加载AddIn和请求的UI。我可以调用方法,但是我无法将AddIn
UI对象显示到我的主机容器中:
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;
}
这是我的AddIn返回的列表:
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();
}
答案 0 :(得分:0)