2009-03-31 4 views
5

MVVM 패턴을 사용하고 있으며 ModelView에 문자열 유형 속성이 있습니다.WPF TextBlock 동적 굵게 기울임 꼴 부분

문자열은 HTML 태그 다음이 포함될 수 있습니다 : 나는 보통, 굵게 또는 기울임 꼴로 TextBlock의 텍스트의 특정 부분을해야

<b>, </b>, <i>, </i> 

. 태그에 따라 부품

  • 작성 실행 클래스의 인스턴스를

    1. 나누기 HTML 문자열 :

      는 순간 나는 해결 방법, 다음과 같이 작동하는 도우미 메서드를 만들었습니다 FontWeight 또는 FontStyle 속성을 설정합니다.

    2. TextBlock의 인라인에 Run 클래스 인스턴스를 추가합니다. s 컬렉션

    이 솔루션은 효과가 있지만 MVVM 패턴과 호환되지 않습니다.

    Convertors를 사용하려고 생각했지만 TextBlock의 어떤 속성을 바인딩해야하는지 잘 모르겠습니다.

    어떻게 생각하십니까?이 문제가 어떻게 해결 될 수 있습니까?

  • 답변

    1

    이 문제에서 가장 쉬운 해결책입니다.

    이 BindableRichTextBox를 사용하는 것입니다, 그가 된 컨버터를 사용 http://www.shawnduggan.com/?p=54

    1. 에서 찾을 수는 XAML에 HTML 문자열로 변환 후 FlowDocument 개체로 만들

    2. 바인딩 문서

    3. BindableRichTextBox

      에 RichTextBox를 TextBlock처럼 보이게하십시오 (Focusable = "False", BorderThinkness = "0", BorderBrush = "White".... 등)

    4

    내가 과거에 한 일은 ContentControl을 동적으로 생성 된 TextBlock을 반환하는 ValueConverter를 사용하여 문자열에 바인딩 된 ContentControl을 사용하는 것입니다. 기타 솔루션은 this one을 포함하여 여기에서 찾을 수 있습니다.

    +0

    ContentControl 및 BindableRun을 시도합니다. 고맙습니다! –

    +0

    그레이트 솔루션! 글쎄, 좋아, 나는'Inlines' 속성에 바인딩 할 수 있기를 원하지만 그러한 지원이 없다면 이것은 정말 좋은 대안이다. 'Run'의'Text' 속성이 이제는 의존성 프로퍼티이기 때문에 BindableRun이 필요없이 바인드 될 수 있습니다. –

    관련 문제