【问题标题】:Binding Hyperlink to richtextblock in windows 8 Metro app在 Windows 8 Metro 应用程序中将超链接绑定到 Richtextblock
【发布时间】:2012-03-24 12:38:28
【问题描述】:

我正在构建一个 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);
            }

【问题讨论】:

  • 您能告诉我们您目前拥有的代码吗?
  • 在 WPF/Silverlight 中,如果链接足够简单(只有一个文本或图像),我会使用 HyperlinkBut​​ton。也许它也可以在地铁上使用? (我手边没有 VS11)。

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


【解决方案1】:

Microsoft 从 Metro XAML 中删除了对内联超链接的支持。您仍然可以将HyperlinkButton 用于非内联超链接,或者如果您的内联超链接很短(1-2 个字),那么您可以将 HyperlinkBut​​ton 放置在 RichTextBlock 中的 InlineUIContainer 内。以后的解决方案需要一些代码,只是使用绑定是不行的。

【讨论】:

    猜你喜欢
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多