私のホストにMAF UIオブジェクトを表示できません
質問
MAFフレームワークを実装し、パイプラインとa
を送信するアドインを作成しました。<!-- language-all: lang-cc -->
.
Plugin自体である私のホストへの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();
または穴プラグインビューを別のウィンドウに入れたとしても。
マイプラグインは、My Addin UIオブジェクトを含むすべてのUserControl
オブジェクトを表示しています。
これは私のホストサイドの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();
}
. 解決
誰かが同じ問題に直面している場合、これがMSDNフォーラムにある回答です。
所属していません StackOverflow