لا يمكن عرض كائن MAF ui في مضيفي
سؤال
لقد قمت بتنفيذ إطار عمل MAF، وإنشاء خط أنابيب ووظيفة إضافية ترسل ملف
<!-- language-all: lang-cc -->
UserControl
إلى مضيفي وهو البرنامج المساعد في حد ذاته.
يتم كتابة عنصر التحكم الذي سيتم إرساله إلى المضيف على النحو التالي، ويتم تنفيذه UserControl
ويحتوي على خاصية سلسلة إضافية:
Contract : public interface ITestSuiteUiContract : INativeHandleContract
AddInViews : public class TestSuiteUi : UserControl
HostViews : public abstract class AbstractTestSuiteUi : UserControl
يقوم المضيف بتحميل AddIn وواجهة المستخدم المطلوبة.يمكنني استدعاء الأساليب، ولكن لا أستطيع عرض الخاص بي AddIn
كائن واجهة المستخدم في حاوية المضيف الخاصة بي:
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();
}
المحلول
إذا واجه شخص ما نفس المشكلة، فإليك الإجابة الموجودة في منتدى msdn:http://social.msdn.microsoft.com/Forums/vstudio/en-US/cd30e928-31c8-4352-b86a-c6bcd64a3192/addin-apperence-issuein-wpf?forum=wpf