문제

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();
    }
도움이 되었습니까?

해결책

누군가 동일한 문제에 직면한 경우 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