Wp8中的FlowDocument替代或超链接并在同一行上运行

时间:2014-03-23 20:28:09

标签: c# xaml windows-phone-8 hyperlink richtextbox

我有一个带有超链接的文字。 为了不刺激读者,我想让普通文本和链接在同一行。现在每个Inline元素都会开始一个新行。

显示:

  

请访问

     

http://google.com

     

继续。

我想:

  

请访问http://google.com继续。

我还注意到,超链接命中区域覆盖了内嵌元素,而不仅仅是文本。

我的问题与此处描述和解决的问题相同: Add clickable hyperlinks to a RichTextBox without new paragraph

问题是,似乎不像wp8的flowdocument这样的东西不存在。 我需要以编程方式创建内联元素。

编辑1:

这里我的代码是如何添加内联元素的:

                    int index = 0;
                    rt = new RichTextBox() { };

                    while (true)
                    {
                        Paragraph para = new Paragraph();
                        if (item.text.Substring(index).IndexOf("<") == 0)
                        {
                            //TRUE when link 
                            //I extract the URL and the linktext, and also update the index

                            Hyperlink hyper = new Hyperlink();
                            hyper.Click += new RoutedEventHandler((sender,e) => Hyperlink_Click(sender,e,URL));
                            hyper.Inlines.Add(linktext);
                            para.Inlines.Add(hyper);
                        }
                        else if (item.text.Substring(index).Contains("<"))
                        {
                            //TRUE when text, item.text contains a link
                            // I extract the text and update index
                            Run run = new Run() { Text = text };
                            para.Inlines.Add(run);
                        }
                        else
                        {
                            //TRUE when only text is left
                            Run run = new Run() { Text = item.text.Substring(index) };
                            para.Inlines.Add(run);
                            rt.Blocks.Add(para);
                            break;
                        }
                        // REMOVE: rt.Blocks.Add(para);
                    }
                    rt.SetValue(Grid.RowProperty, MainViewer.RowDefinitions.Count - 1);
                    MainViewer.Children.Add(rt);

编辑2

我仍然无法解决这个问题,没有人知道解决方案吗?我之前在应用程序中看到了我想要的东西,所以它必须是可能的。

编辑3

我为每个内联元素创建了一个新段落。我已修复上面的代码,现在正在使用

1 个答案:

答案 0 :(得分:0)

Paragraph p = new Paragraph();
p.Inlines.Add("Plase visit ");
var link = new Hyperlink();
link.Inlines.Add("google.com ");
p.Inlines.Add(link);
p.Inlines.Add("to continue");
rtb.Blocks.Add(p);

这对我来说很好。

PS 如果你想在你的app中显示一些html,你可以使用http://msptoolkit.codeplex.com/中的HTMLTextBox或HTMLViewer