private static void OnRunStreamChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (!(d is RichTextBox target)) { return; } void OnMessage(object sender, Run run) { var para = GetOrCreateParagraph(target); para.Inlines.Add(XamlHelper.XamlClone(run)); target.ScrollToEnd(); } if (e.OldValue != null) { var coll = (RunStream)e.OldValue; coll.OnMessage -= OnMessage; } if (e.NewValue != null) { var coll = (RunStream)e.NewValue; coll.OnMessage += OnMessage; } }
private static void OnBindedDocumentChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (!(d is RichTextBox target)) { return; } FlowDocument doc = e.NewValue as FlowDocument; if (doc == null) { target.Document = new FlowDocument(); return; } target.Document = XamlHelper.XamlClone(doc); }
private static void OnBindableInlinesChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (!(d is TextBlock Target)) { return; } FlowDocument doc = e.NewValue as FlowDocument; var para = doc?.Blocks?.FirstBlock as Paragraph; if (para == null) { return; } Target.Inlines.Clear(); foreach (var item in para.Inlines) { Target.Inlines.Add(XamlHelper.XamlClone(item)); } }