RichTextBox Silverlight Замена выделенного текста - PullRequest
0 голосов
/ 04 мая 2011

Хорошо, у меня есть класс, который использует наследование Richtextbox.

  • ВХОД:

Мне нужно получить выделенный текст из RichTextBox и заменить его на несколькотеги, я имею в виду:

A sample text to replace but only the selected sample word

И я выбираю «образец» и нажимаю кнопку, чтобы преобразовать его в:

A <A>sample</A> text to replace but only the selected sample word

Код для замены, который я использовал:

string selected = this.Selection.Text.Trim();

            if (selected.Length > 0)
            {
                this.Html = this.FormatedText.Replace(selected, string.Format("<{0}>{1}</{0}>", tagName, selected));
            }

Html и FormatedText являются атрибутами моего класса

Проблема в том, что RichTextBox.selection.text получает образец, и если я пытаюсь использовать string.replace, все образцы слов будут помечены, а не только выбранное.

  • NEEDS:

¿Как получить выбранное слово и начальную позицию выбранного слова в исходном тексте, а затем получитьвесь текст в моем RichTextBox с новыми вставками?

Ответы [ 2 ]

0 голосов
/ 05 мая 2011

Один из способов - выбрать от начала содержимого в richtextbox до начала выделенного текста, а затем получить выделенный текст и его длину :):

 string selected = this.Selection.Text;

            if (selected.Length > 0)
            {
                selected = selected.Trim();

                //Change the selection from the start of the full text to the start of the selection text
                this.Selection.Select(this.ContentStart, this.Selection.Start);

                string init = this.FormatedText.Substring(0, this.Selection.Text.Length);
                string final = this.FormatedText.Substring(this.Selection.Text.Length + selected.Length, this.FormatedText.Length - (this.Selection.Text.Length + selected.Length));

                this.Html = string.Format("{0}{1}{2}", init, string.Format("<{0}>{1}</{0}>", tagName, selected), final);
            }
0 голосов
/ 04 мая 2011

Попробуйте это:

 private void button1_Click(object sender, RoutedEventArgs e)
    {
        rtb.Selection.Text = "<A>" + rtb.Selection.Text + "</A>";
    }

RTB является RichTextBox

редактирование:

надеюсь, что это то, что вы хотите ... теперь вы получаете все измененные предметы

        rtb.Selection.Text = "<A>" + rtb.Selection.Text + "</A>";

        //this works in silverlight
        rtb.SelectAll();
        string all = rtb.Selection.Text;

        List<string> allThatChanged = new List<string>();
        while (all.Contains("<A>"))
        {

            allThatChanged.Add(all.Substring(all.IndexOf("<A>"), all.IndexOf("</A>") - all.IndexOf("<A>") + 4));
            all = all.Remove(all.IndexOf("<A>"), all.IndexOf("</A>") - all.IndexOf("<A>") + 4);
        }
...