سؤال

لقد قمت بتنفيذ إطار عمل 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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top