Добавление новой строки в RichTextBox не работает - PullRequest
0 голосов
/ 13 февраля 2019

В моем приложении WPF есть элемент управления RichTextBox.Я связываю текст для RichTextBox со свойством.Я пытаюсь добавить новую строку в текст, но это не работает.Я пытался добавить "\ n", "Environment.NewLine".Ничто из этого не работает.

Это то, что у меня есть для XAML:

  <RichTextBox Name="EmailBody" resources:HtmlRichTextBoxBehavior.Text="{Binding EmailBody}" IsDocumentEnabled="True" AcceptsTab="True"  ScrollViewer.VerticalScrollBarVisibility="Auto" SpellCheck.IsEnabled="True"/>

И это то, что у меня есть для свойства текста:

 private string emailBody;

    public string EmailBody
    {
        get { return emailBody; }
        set
        {
            if (value != emailBody)
            {
                emailBody = value;
                OnPropertyChanged("EmailBody");
            }
        }
    }

Сейчасв моем классе ViewModel я пытаюсь добавить новую строку в свойство:

EmailBody += Environment.NewLine;

Это класс поведения для HtmlRichTextBoxBehavior:

      public class HtmlRichTextBoxBehavior : ObservableObject
    {
        public static readonly DependencyProperty TextProperty =
   DependencyProperty.RegisterAttached("Text", typeof(string),
   typeof(HtmlRichTextBoxBehavior), new UIPropertyMetadata(null, OnValueChanged));

        public static string GetText(RichTextBox o) { return (string)o.GetValue(TextProperty); }

        public static void SetText(RichTextBox o, string value) { o.SetValue(TextProperty, value); }

        private static void OnValueChanged(DependencyObject dependencyObject,
          DependencyPropertyChangedEventArgs e)
        {
            var richTextBox = (RichTextBox)dependencyObject;
            var text = (e.NewValue ?? string.Empty).ToString();
            var xaml = HtmlToXamlConverter.ConvertHtmlToXaml(text, true);
            var flowDocument = XamlReader.Parse(xaml) as FlowDocument;
            HyperlinksSubscriptions(flowDocument);
            richTextBox.Document = flowDocument;
        }

        private static void HyperlinksSubscriptions(FlowDocument flowDocument)
        {
            if (flowDocument == null) return;
            GetVisualChildren(flowDocument).OfType<Hyperlink>().ToList()
                     .ForEach(i => i.RequestNavigate += HyperlinkNavigate);
        }

        private static IEnumerable<DependencyObject> GetVisualChildren(DependencyObject root)
        {
            foreach (var child in LogicalTreeHelper.GetChildren(root).OfType<DependencyObject>())
            {
                yield return child;
                foreach (var descendants in GetVisualChildren(child)) yield return descendants;
            }
        }

        private static void HyperlinkNavigate(object sender,
         System.Windows.Navigation.RequestNavigateEventArgs e)
        {
            Process.Start(new ProcessStartInfo(e.Uri.AbsoluteUri));
            e.Handled = true;
        }

Это неза работой.Есть идеи, что я тут делаю не так?

1 Ответ

0 голосов
/ 13 февраля 2019

Я бы попытался добавить текст новой строки в конец значения, которое устанавливается в emailBody, вместо того, чтобы пытаться присвоить его EmailBody.

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

value += System.Environment.NewLine;

Надеюсь, это поможет

...