2014-02-26 70 views
0

我已經實現了MAF框架顯示MAF UI對象,創建一個管道,一個插件,它發送一個不能在我的主機

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

UserControl到我的主機是一個插件本身。

發送到主機的控制被寫爲下面,它實現UserControl幷包含一個額外的字符串屬性:

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

主機加載外接程序和要求的UI。我可以調用方法,但我不能顯示我的AddIn UI對象到我的主機容器:

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

,除非我把它放在一個單獨的窗口 new Window { Content = TestSuiteUicontainer }.Show();

或者即使我把孔插件視圖在一個單獨的窗口中。

我的插件顯示全部UserControl對象免除我的AddIn ui對象。

這裏是我的主機端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(); 
    } 
+0

使用snoop時,ContentControl中的內容屬性顯示HostSideAdapters.ContractToViewAdapters.DataTypes.TestSuiteUiContractToViewAdapter {路徑= TestSuiteUiContainer}。所以它得到的對象正確,但無法顯示它。 – amelki

+0

即使在此處重新實現msdn示例http://msdn.microsoft.com/en-us/library/bb909887(v=vs.100).aspx 我仍然遇到同樣的問題: 'MainView.DockPanelContainer.Children。 Add(_testSuiteLoader.LoadedTestSuite.GetAddInUI());' 'new Window(){Content = _testSuiteLoader.LoadedTestSuite.GetAddInUI()} .Show(); 其中第一行無法顯示,第二行顯示我的UI – amelki

回答