2011-04-27 2 views
6

WPF에서 사용자 정의 Inline 구현을 만들고 싶습니다. Inline의 문서에서 : "모든 인라인 흐름 내용 요소의 기초를 제공하는 추상 클래스." Figure, Run 또는 Span과 같은 클래스는 Inline을 상속합니다.인라인 클래스의 하위 클래스를 만들려면 어떻게해야합니까? (FlowDocument에서 사용되는 것)

Inline을 상속 한 사용자 정의 클래스는 '2 lined Run'과 유사합니다. 나는 문서의 흐름에 대한 특별한 필요를 가지고 있으며 이것은 유일한 방법 인 것처럼 보인다. 그러나 어디서부터 시작해야할지 모르겠다 : Inline 어떤 회원도 정의하지 않았습니다! 그것은 추상 클래스이기 때문에 상속받을 예정이지만 은 상속받는 방법에 대한 문서가 없습니다. MSDN이 아니고 어디서나 찾을 수있는 곳이 없습니다.

Inline의 하위 클래스를 만드는 방법에 대한 온라인 리소스 (자습서/블로그/아티클) 또는 코드 샘플을 제공 할 수 있다면. 예를 들어 일부 너비와 높이의 빈 상자 만 나타납니다.

사용자 정의 Inline 요소를 생성하려는 이유를 알고 싶다면 Create guitar chords editor in WPF 질문을 살펴보십시오.

+0

'Run'또는 'Span'의 소스 코드에 대한 링크를 제공하면 매우 유용합니다. – drasto

+0

그냥 반사경을 사용하여 코드 –

+0

을 만날 수 있습니다. @ 토마스 레베 스크 : 나는 그것을 할 것입니다.하지만 전에 반사경을 사용 해본 적이 없기 때문에 시간이 걸릴 것입니다. 나는 그것을 설치하고 그것을 사용하는 방법을 알아 내야 할 것이다. – drasto

답변

2

기본 클래스는 형식 충실도를 추가하기위한 목적으로 만 사용할 수 있습니다.

if(currentElement is Inline) 
{ 
    // Do something 
} 

인라인 실제로 전혀 아무것도 할 필요가 없습니다 : 예를 들어, FlowDocument 프로세서의 코드는 다음과 같은 코드를 수행 할 수 있습니다.

인라인에서 서브 클래 싱하기 전까지는 원하는 것을 달성하지 못할 수도 있습니다. 내 이해는 FlowDocument 렌더러가 요소의 유형을보고 해당 유형과 속성에서 동작하는 방식을 해석해야한다는 것입니다. 즉, 사용자 정의 코드에 대한 지식이 없습니다. 나는 당신이 할 수있는 최선의 방법은 유용한 요소로부터 서브 클래스를 만들고, 서브 클래스에 속성 값이나 오버라이드 할 수있는 것을 포함시키는 것이다.

첨부 된 속성을 추가하고 이러한 속성을 정의하는 하위 요소를 처리 할 수도 있습니다. 예를 들어, 하이퍼 링크 컨테이너가 서로 다른 자식 요소가 서로 다른 링크를 제공 할 수있게하려면 하이퍼 링크에서 하위 클래스로 만들고 새 링크 연결 속성을 정의하고 하이퍼 링크 자체와 다르게 자식의 클릭 이벤트를 처리 할 수 ​​있습니다.

InlineUIContainer 및 BlockUIContainer 요소를 사용하면 사용자 정의 UIElements를 포함하여 UIElement를 포함시킬 수 있습니다.

+0

첨부 된 속성이 도움이되지 않을까 걱정됩니다. ** 텍스트의 레이아웃/렌더링 동작에 영향을 주려고합니다 **. 그리고이 텍스트는 문서에 텍스트로 동작 할 것입니다. 블록에없는 경우에만 사용해야합니다. 따라서 사용자 정의 UIElements 또는 BlockUIContainer가있는'InlineUIContainer'는 올바른 해결책이 아닙니다. 특히 텍스트 선택은'InlineUIContainer' 또는'BlockUIContainer' 전체를 하나의 요소로 간주합니다. 자세한 내용은 내 질문 [WPF에서 기타 코드 편집기 만들기] (http://stackoverflow.com/questions/5796457/create-guitar-chords-editor-in-wpf-from-richtextbox) 및 거기에 링크 된 질문을 참조하십시오. – drasto

+1

내 생각 엔 네가이 문제를 해결할 수있을 것 같아. 해결책을 찾으면 공유하십시오. –

+0

나는 ...'FlowDocument'를 디자인 한 WPF 사람들은 기타리스트를 잊어 버린 것 같습니다. (C#과 같은 프로그래밍 언어의 솔루션은 거의 항상 있습니다.) WPF의 절반을 다시 작성하는 것 같은 불안한 일일 수도 있습니다. 뭔가 내 자신의'FlowDocument'과 RichTextBox가 확장됩니다 : (( – drasto

관련 문제