Автоматическая замена текста в wpf richtextbox

У меня есть WPF.NET 4 С# RichTextBox, и я хочу заменить определенные символы в этом текстовом поле другими символами, это произойдет в событии KeyUp.

То, что я пытаюсь достичь, - это заменить аббревиатуры полными словами, например: pc = персональный компьютер sc = starcraft и т.д.

Я просмотрел несколько похожих потоков, но все, что я нашел, не было успешным в моем сценарии.

В конечном счете, я хотел бы иметь возможность сделать это со списком сокращений. Однако у меня возникают проблемы с заменой одного аббревиатура, может ли кто-нибудь помочь?

1 ответ

Поскольку System.Windows.Controls.RichTextBox не имеет свойства для Text для определения его значения, вы можете обнаружить его значение, используя следующие

string _Text = new TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd).Text;

Затем вы можете изменить _Text и опубликовать новую строку, используя следующую

_Text = _Text.Replace("pc", "Personal Computer");
if (_Text != new TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd).Text)
{
new TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd).Text = _Text;
}

Итак, это будет выглядеть как

string _Text = new TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd).Text;
_Text = _Text.Replace("pc", "Personal Computer"); // Replace pc with Personal Computer
if (_Text != new TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd).Text)
{
new TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd).Text = _Text; // Change the current text to _Text
}

Примечание. Вместо использования Text.Replace("pc", "Personal Computer"); вы можете объявить List, в котором вы сохраните символы и их замены

Пример:

List<string> _List = new List<string>();
 private void richTextBox1_TextChanged(object sender, TextChangedEventArgs e)
 {
 string _Text = new TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd).Text;
 for (int count = 0; count < _List.Count; count++)
 {
 string[] _Split = _List[count].Split(','); //Separate each string in _List[count] based on its index
 _Text = _Text.Replace(_Split[0], _Split[1]); //Replace the first index with the second index
 }
 if (_Text != new TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd).Text)
 {
 new TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd).Text = _Text;
 }
 }
 private void Window_Loaded(object sender, RoutedEventArgs e)
 {
 // The comma will be used to separate multiple items
 _List.Add("pc,Personal Computer");
 _List.Add("sc,Star Craft");
 }
</string></string>

Спасибо, Надеюсь, вы сочтете это полезным:)

licensed under cc by-sa 3.0 with attribution.