Odpowiednik RichTextBoxa WFA w WPF

0

Witam, posiadam aplikację w WinForms, w której użyty jest RichTextBox. Jest tam wczytywany bardzo duży plik (po wklejeniu do Worda ma ok. 7.000 stron) - następnie są podświetlane niektóre z fragmentów kodu. Wszystko działa fajnie, szybko.

Potrzebuję teraz przenieść to do WPF... ale nie umiem nawet się Bindować do odpowiedniej propertki - po prostu ta kontrola jest dla mnie bardzo trudna w użyciu. Czym ją mogę zastąpić? Czy może ktoś podać przykład tego, jak się zbindować propertkę z viewmodelu do tej kontrolki?

Interesuje mnie podobna funkcjonalność (zwykłe pole bez przycisków).

Zapomniałbym - ta pierwsza aplikacja działała szybko jedynie z RichTextboxem... ze zwykłym Textboxem bardzo wolno. Dlatego potrzebuję użyć tego pierwszego.

0

WPF też ma RichTextBoxa.
I nie rozumiem co chcesz bindować.

0

Tak, ma RichTextBoxa. Wczytuję plik (komenda w ViewModelu) do stringa i chciałbym go wyświetlić w RichtextBoxie. Jednak wcale nie jest to takie proste jakby się mogło wydawać. Też myślałem, że zajmie mi to 30 sekund.

Nie ma tam żadnej właściwości "Text", "Content", do której mógłbym zrobić {Binding MyProp}.

0
      <RichTextBox>
         <FlowDocument>
            <Paragraph>
               <Run Text="A jednak jest TEXT! :)"/>
            </Paragraph>
         </FlowDocument>
      </RichTextBox>

Więcej na temat: http://msdn.microsoft.com/en-us/library/system.windows.controls.richtextbox.document.aspx

0

Super, a pomożecie mi zaznaczać fragmenty z poziomu kodu? W WinForms używałem tego tak:

richTextBox1.Select(start, length);

A tutaj nie mam pojęcia jak. Próbowałem nawet:

richTB.SelectAll();

Efekt żaden.

W Internecie znalazłem:

richTB.Selection.Select(contentStart.GetPositionAtOffset(start), contentStart.GetPositionAtOffset(end));

Również brak efektu.

1
         //Przykład dla tekstu: "Post pod tytułem: Odpowiednik RichTextBoxa WFA w WPF. Forum: 4Programmers.net"
         RichTextBox.SelectAll();
         TextSelection currentSelection = RichTextBox.Selection;
         // Tutaj masz zwrócony cały tekst
         string allTextInRichTextBox = currentSelection.Text;

         // Zaznaczenie konkretnego słowa i podkreślenie go w GUI
         TextRange range = new TextRange(RichTextBox.Document.ContentStart, RichTextBox.Document.ContentEnd);
         Regex reg = new Regex("4Programmers.net", RegexOptions.Compiled | RegexOptions.IgnoreCase);
         TextPointer start = RichTextBox.Document.ContentStart;
         while (start != null && start.CompareTo(RichTextBox.Document.ContentEnd) < 0)
         {
            if (start.GetPointerContext(LogicalDirection.Forward) == TextPointerContext.Text)
            {
               Match match = reg.Match(start.GetTextInRun(LogicalDirection.Forward));

               TextRange textrange = new TextRange(start.GetPositionAtOffset(match.Index, LogicalDirection.Forward), start.GetPositionAtOffset(match.Index + match.Length, LogicalDirection.Backward));
               textrange.ApplyPropertyValue(TextElement.ForegroundProperty, new SolidColorBrush(Colors.Blue));
               textrange.ApplyPropertyValue(TextElement.FontWeightProperty, FontWeights.Bold);
            }
            start = start.GetNextContextPosition(LogicalDirection.Forward);
         }

Źródła:
http://msdn.microsoft.com/pl-pl/library/system.windows.controls.richtextbox.selection(v=vs.110).aspx
http://stackoverflow.com/a/5690368

0

Nie mogę zaakceptować, bo jestem niestety niezarejestrowany. Bardzo Ci dziękuję!

0

Po dokładniejszej analizie jednak stwierdzam, że to nie do końca to o co mi chodziło. Nie mogę wyszukiwać tekstu, tylko muszą to być indeksy (jak w WinForms).

Mój tekst nie wygląda tak:
"4programmers.net jakiś tekst 4programmers.net coś"
tylko:
"4programmers.netjakiśtekst4programmers.netcoś"

Co więcej - mój tekst wygląda nawet tak:

"ammers.net4programmers.net jakiś tekst 4programmers.net coś4progr"

Przy czym indeksy wiem, które mam zaznaczyć.

0

Dobra, nie było pytania - poradziłem sobie z indeksami. Debil ze mnie. Przepraszam ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1