public override void OnValueChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
            if (sender is RichTextBox rcontrol)
            {
                Task.Delay(200).ContinueWith((_, obj) =>
                {
                    var control = (RichTextBox)obj;
                    if (control.DataContext is MessageObject msg)
                    {
                        var text = msg.content;
                        string regstr = "(1[3456789]([0-9]){9})|((http[s]{0,1}|ftp)://[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)|(www.[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)";
                        var rg = new Regex(regstr);
                        var match = rg.Match(text);
                        if (match.Success)
                        {
                            var start = match.Index;
                            var end = match.Index + match.Length;
                            if (control.Document.Blocks.Count == 1)
                            {
                                var block = control.Document.Blocks.FirstBlock;
                                if (block is Paragraph para)
                                {
                                    if (para.Inlines.Count == 1)
                                    {
                                        para.Inlines.Remove(para.Inlines.FirstInline);//先移除老的文本
                                        if (start > 0)
                                        {
                                            var before = text.Substring(0, start);//添加链接之前的文本
                                            para.Inlines.Add(before);
                                        }
                                        var link = new Hyperlink(new Run(match.Value));//链接文字
                                        link.Style = App.Current.GetResource<Style>("NoUnderLineLink");
                                        var matchstr = match.Value;
                                        //if (matchstr.StartsWith("http") || matchstr.StartsWith("https") || matchstr.StartsWith("ftp") || matchstr.StartsWith("www"))
                                        //{
                                        //    link.NavigateUri = new Uri(match.Value);
                                        //}
                                        //else
                                        {
                                            link.Click += (s, e) =>
                                            {
                                                Process.Start(match.Value);
                                            };
                                        }
                                        //link.IsEnabledChanged += (s, e) =>
                                        //{
                                        //    var control = (Hyperlink)s;
                                        //    control.IsEnabled = true;
                                        //};
                                        para.Inlines.Add(link);
                                        link.Cursor = Cursors.Hand;
                                        link.IsEnabled = true;
                                        if (end < text.Length - 1)//如果链接在文字中间
                                        {
                                            var after = text.Substring(end, text.Length - end);
                                            para.Inlines.Add(after);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }, rcontrol, TaskScheduler.FromCurrentSynchronizationContext());
            }
        }