在Windows 8 Metro应用程序中将超链接绑定到richtextblock

时间:2012-03-24 12:38:28

标签: xaml windows-8 microsoft-metro windows-runtime

我正在构建一个用于娱乐/学习等的Windows 8 metro应用程序 我已经创建了包含描述,图像等的文本项的列表视图。在描述中,通常有我想要点击的超链接。

但是,绑定到文本块时,xaml超链接代码显示为文本。搜索arround,看起来我需要使用richtextblock来进行超链接。我似乎无法弄清楚如何绑定到它的超链接。我在wpf中找到了许多示例,展示了如何使用flowdocument扩展richtextblock。 Flowdocument在框架的当前消费者预览版本中不存在。

我正在联系,看看是否有人解决了这个问题,或者对于要走哪条道路有任何建议。

编辑: 我目前的代码

现在我只是将“状态对象”中的“文本”字段绑定到“文本”上的文本块绑定

我在文本字段中有URL,我希望能够点击它。

作为测试,我用超链接标记替换第一个对象的文本字段

离。 feed_results [0] .text =“<hyperlink .....

然后尝试绑定到texblock和richtextblock

的Xaml

<ListView x:Name="ItemListView" ItemsSource="{Binding}"  Background="Black" Width="372" VerticalAlignment="Top" Margin="50,0,0,0">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <StackPanel  Orientation="Vertical"  MinHeight="100">
                            <StackPanel Orientation="Horizontal">
                            <Image Source="{Binding user.profile_image_url}" Margin="0,0,15,0" VerticalAlignment="Top" />
                            <StackPanel Orientation="Vertical">
                                    <TextBlock HorizontalAlignment="Left" Foreground="Gray" Text="{Binding user.name}" FontWeight="Bold" TextWrapping="Wrap"  MaxWidth="200" />
                                    <TextBlock HorizontalAlignment="Left" Foreground="Gray"   Text="{Binding text}" TextWrapping="Wrap"  MaxWidth="200" />                      
                                </StackPanel>
                            </StackPanel>
                            <StackPanel  Margin="0,15,0,0" HorizontalAlignment="Right">
                                <TextBlock Text="{Binding created_at,  Converter={StaticResource StringConverter},ConverterParameter=Released: \{0:d\}}"   HorizontalAlignment="Center" Foreground="Gray" />
                            </StackPanel>
                        </StackPanel>
                    </DataTemplate>
                </ListView.ItemTemplate>

后端代码

FeedResult<Statuses> r2 = await feed.StatusesAsync(1, 50);

            if (!r2.HasError)
            {
                feed_results = r2.Result;


                Dispatcher.Invoke(Windows.UI.Core.CoreDispatcherPriority.High, new Windows.UI.Core.InvokedHandler((o, a) =>
                {

                    ItemListView1.ItemsSource = feed_results;
                }), this, null);
            }

1 个答案:

答案 0 :(得分:3)

Microsoft删除了对Metro XAML内联超链接的支持。您仍然可以使用HyperlinkButton作为非内联超链接,或者如果您的内联超链接短(1-2个单词),那么您可以将HyperlinkBut​​ton放在RichTextBlock中的InlineUIContainer中。以后的解决方案需要一些代码,只需使用绑定就不会这样做。