NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
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.