2009-03-31 17 views
5

Używam wzorca MVVM i mam właściwość typu ciąg w moim ModelView.WPF TextBlock dynamiczne pogrubienie i kursywa części

Łańcuch może zawierać następujące znaczniki HTML:

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

muszę dokonać pewnych części tekstu w TextBlock być w normalnym, pogrubienie lub kursywa.

Na chwilę Stworzyłem obejścia metody pomocnika, który działa tak:

  1. przerw ciąg HTML na części

  2. Tworzy instancję klasy Run

  3. zależności od znacznika ustawia właściwości FontWeight lub FontStyle

  4. Dodaje instancję klasy Run do wbudowanego TextBlocka s kolekcja

To rozwiązanie działa, ale nie jest kompatybilne ze wzorcem MVVM.

Myślałem o użyciu Konwertery, ale nie jestem pewien, do której właściwości TextBlock powinienem się zobowiązać.

Co myślisz, w jaki sposób można rozwiązać ten problem?

Odpowiedz

1

Najprostszym rozwiązaniem, które znalazłem dla tego problemu.

Czy używać BindableRichTextBox, które można znaleźć na http://www.shawnduggan.com/?p=54

  1. Stosując konwertery konwersji HTML ciąg XAML i następnie uczynić go przedmiotem FlowDocument

  2. Bind dokumentu do BindableRichTextBox

  3. Spraw, aby RichTextBox wyglądał jak TextBlock (Focusable = "False", BorderThinkness = "0", BorderBrush = "White" .... itp.)

4

Coś, co robiłem w przeszłości, to użycie ContentControl, z właściwością Content związaną z ciągiem z ValueConverter, który zwraca dynamicznie utworzoną blokadę TextBlock. Inne rozwiązania można znaleźć tutaj, w tym this one.

+0

Spróbuję ContentControl i BindableRun. Dziękuję Ci! –

+0

Świetne rozwiązanie! Cóż, ok, wolałbym móc powiązać własność 'Inlines', ale przy braku takiego wsparcia jest to naprawdę dobra alternatywa. Warto również zauważyć, że własność 'Text'' Run' jest teraz właściwością zależności, więc można ją powiązać bez potrzeby BindableRun. –

Powiązane problemy