2011-05-03 1 views
2

내 Windows는 텍스트 편집 요구 사항을 충족시키기 위해 양식 중 하나에서 응용 프로그램 호스트 AvalonEdit (문제의 복합 WPF 컨트롤)을 호스팅합니다. 여기 내가 사용하는 코드는 다음과 같습니다호스팅 된 WPF 복합 컨트롤의 기이 한 스크롤 막대 UI

WPFHost = gcnew ElementHost(); 
TextField = gcnew AvalonEdit::TextEditor(); 
WPFHost->Dock = DockStyle::Fill; 
WPFHost->Child = TextField; 

TextField->Options->AllowScrollBelowDocument = false; 
TextField->Options->EnableEmailHyperlinks = false; 
TextField->Options->EnableHyperlinks = true; 
TextField->Options->RequireControlModifierForHyperlinkClick = true; 
TextField->ShowLineNumbers = true; 

ContainerControl->Controls->Add(WPFHost); // the container is a panel 

코드는 컴파일하고 스크롤바를 제외하고, 잘 실행 - http://dl.dropbox.com/u/2584752/avalonEditBug.png은. 막대의 왼쪽을 오른쪽 클릭하면 ArgumentOutOfRange 예외가 발생합니다.

이상하게도 새로 만든 샘플 프로젝트에서 컨트롤을 호스팅 할 때 문제를 재현 할 수 없었습니다. 텍스트 편집기의 최신 빌드를 사용하고 필요한 모든 어셈블리를 설치하십시오.

편집 : 사용자 정의 컨트롤에서 편집기를 배치해도 도움이되지 않습니다.

답변

0

나에게 레이아웃 오류가있는 것 같습니다. 아마도 WPFHost는 TextField를 예기치 않게 측정합니다.

TextField 자체에서 특정 폭과 높이를 설정하도록 제안 할 수 있습니다. 이 방법으로 문제가 해결되면 WPFHost 컨트롤의 크기가 변경 될 때 조정할 수 있습니다. 또는 MaxHeight/Width를 설정해보십시오. 때때로 폭/높이 업데이트에 대한 코드를 저장하고 저장합니다.

+0

불행히도 도움이되지 않았습니다. – shadeMe

0

ElementHost의 자식으로 WPF 그리드를 만들고 해당 그리드 안에 편집기를 놓으십시오. 다른 방법으로 UserControl을 만들고 해당 컨트롤에 편집기가 있고 Winform 응용 프로그램 내부에서 컨트롤을 사용하는 것입니다. 그런 접근은 나에게 두세 시간을 도왔다.

+0

Grid 컨트롤이 도움이되지 않았습니다. 필자는 텍스트 편집기를 사용자 정의 컨트롤로 래핑하려고 시도 하겠지만, 왜 ** 새로운 프로젝트에서는 ** 현재 작동하지 않는지 ** 궁금합니다. – shadeMe

1

당신은 컨트롤이 새로운/빈 프로젝트에서 잘 작동한다고하지만, 당신이 필요로하는 것에서는 실패하면 무엇보다 충돌에 대해 궁금해하게됩니다. 프로젝트에서 당신은 정말로 그것이 차이점이 무엇인지에 대해 연구했던 프로젝트와 비교하고 싶습니다. .NET 버전? 하나의 디렉토리에서 다른 GAC에서 어셈블리를 참조 할 수 있습니까?

컨트롤이 다른 곳에서 작동 할 때 컨트롤이 엉망이라고 말하기는 어렵습니다. 따라서 제안 할 수있는 유일한 방법은 두 프로젝트의 차이점을 자세히 살펴 보는 것입니다.

행운을 빈다.

+0

유감스럽게도, 관리되는 코드를 네이티브 응용 프로그램 (Win32 API를 UI 대신 사용함)에 삽입하는 것이 가장 중요합니다. 필자는 파일 경로에 특별한 처리가 필요한 제 3 자 어셈블리 (물론, 다른 프로젝트에서 하나)를 참조합니다. – shadeMe