Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: searching and scrolling in WPF RichTextBox

Aktivity
Avatar
rprokopec
Člen
Avatar
rprokopec:6.10.2016 1:27

Zdravím všechny a obracím se na vás s problémem vyhledání řetězce v richtextboxu, jeho označení a nascrolování k této označené položce. Na bázi WF mi to funguje bezvadně, ale ve WPF jsem schopen položku najít, označit, ale ne k ní nascrolovat. Vkládám sem kus kódu, co to ve WPF najde a označí a prosím vás o pomoc, jak k tomu nascrolovat. Vznášel jsem anglický dotazy na webu, ale nenašel jsem řešení. Zde je kód:

private void btnSearch1_Click(object sender, RoutedEventArgs e)
        {
            string item = txtSearch2.Text.Trim();
            bool found = false;

            string keyword = item;
            TextRange text = new TextRange(rtb_en.Document.ContentStart, rtb_en.Document.ContentEnd);
            TextPointer current = text.Start.GetInsertionPosition(LogicalDirection.Forward);
            while (current != null)
            {
                string textInRun = current.GetTextInRun(LogicalDirection.Forward);
                if (!string.IsNullOrWhiteSpace(textInRun))
                {
                    int index = textInRun.IndexOf(keyword);
                    if (index != -1)
                    {
                        TextPointer selectionStart = current.GetPositionAtOffset(index, LogicalDirection.Forward);
                        TextPointer selectionEnd = selectionStart.GetPositionAtOffset(keyword.Length, LogicalDirection.Forward);
                        TextRange selection = new TextRange(selectionStart, selectionEnd);
                        //selection.ApplyPropertyValue(TextElement.FontWeightProperty, FontWeights.Normal);
                        rtb_en.Selection.Select(selection.Start, selection.End);
                        rtb_en.Focus();
                        found = true;
                    }
                }
                if (found)
                    break;
                current = current.GetNextContextPosition(LogicalDirection.Forward);
            }
        }
 
Odpovědět
6.10.2016 1:27
Avatar
rprokopec
Člen
Avatar
Odpovídá na rprokopec
rprokopec:6.10.2016 9:09

Odpovídám si sám, neboť jsem našel řešení a dávám ho na plac:

TextPointer start = rtb_en.Selection.Start;
                        FrameworkContentElement fce = (start.Parent as FrameworkContentElement);
                        if (fce != null)
                        {
                            fce.BringIntoView();
                        }
 
Nahoru Odpovědět
6.10.2016 9:09
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.