Удаление пустых блоков из Richtextbox без потери форматирования

#c# #wpf #richtextbox

#c# #wpf #richtextbox

Вопрос:

Я хочу удалить пустые / ненужные пробелы и возврат каретки из моего RichTextBox или TextRange . Ниже приведен код, который я пробовал. Однако, хотя я могу удалить пустые пробелы, но в то же время форматирование тоже теряется.

Я понимаю, что в тот момент, когда я устанавливаю textRange.Text форматирование, оно теряется.

Я не знаю, как двигаться дальше с этим.

 string findword = findWord.Text;
string replaceword = replaceText.Text;

        TextRange textRange = LoadXamlPackage(richTextBox.Document.ContentStart, richTextBox.Document.ContentEnd);

        string[] lines = textRange.Text.Trim().Split('r');

        for (int i = 0; i < lines.Count(); i  )
        {
            if (lines[i].Contains(findword) amp;amp; replaceword == string.Empty)
            {
                lines[i] = "";
            }
        }

        textRange.Text = string.Join(" ", lines);
  

Ответ №1:

строка findword = findWord.Text; строка replaceword = ReplaceText.Text;

     TextRange textRange = new TextRange(richTextBox.Document.ContentStart, richTextBox.Document.ContentEnd);

    string[] lines = textRange.Text.Trim().Split('r');

        for (int i = 0; i < lines.Count(); i  )
        {
            if (lines[i].Contains(findword) amp;amp; replaceword == string.Empty)
            {
                lines[i] = "";
            }
        }
        //textRange.Text = string.Join("", lines);         

        string rtf = string.Empty;
        MemoryStream objmemoryStream = new MemoryStream();
        textRange.Save(objmemoryStream, DataFormats.Rtf);
        rtf = System.Text.ASCIIEncoding.Default.GetString(objmemoryStream.ToArray());           
        rtf = rtf.Replace(findword, replaceword);  
        MemoryStream objmemoryStream1 = new MemoryStream(System.Text.ASCIIEncoding.Default.GetBytes(rtf));
        rtfTestResult.SelectAll();
        rtfTestResult.Selection.Load(objmemoryStream1, DataFormats.Rtf);
  

Когда я раскомментирую нижеприведенную строку, форматирование полностью теряется —
TextRange.Текст = строка.Объединение («», строки);