我正在开发我的第一个WPF应用程序,这很酷。今天碰到了一点砖墙。
我的应用程序充当网络搜索者 - 访问搜索引擎和检索链接。我想以可点击的格式显示链接。我想我会将生成的string[]
个链接绑定到ListBox
并在其中放置一个Hyperlink
。经过一些谷歌搜索,这是我想出来的:
<ListBox Height="200" ItemsSource="{Binding Path=UrlsFound, Mode=OneWay}" Name="listBox1" Width="727">
<ListBox.Resources>
<DataTemplate DataType="String">
<TextBlock>
<Hyperlink NavigateUri="{Binding}" RequestNavigate="Hyperlink_RequestNavigate">
<TextBlock Text="{Binding}" />
</Hyperlink>
</TextBlock>
</DataTemplate>
</ListBox.Resources>
</ListBox>
并在代码隐藏中:
private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e)
{
Process.Start(new ProcessStartInfo(e.Uri.AbsoluteUri));
e.Handled = true;
}
我在网上的几个地方发现了RequestNavigate
代码。
所以一切都很好,并且列表框中包含了所有链接,但它们不可点击。我在RequestNavigate
上添加了一个未被点击的断点(尝试双击),甚至尝试添加Click
处理程序。我做错了什么?
答案 0 :(得分:6)
我认为问题在于您的DataTemplate与列表项没有任何关联。您应该指定ListBox.ItemTemplate,而不是仅在参考资料部分中定义DataTemplate(它不像没有键的样式那样工作)。
<ListBox Height="200" ItemsSource="{Binding Path=UrlsFound, Mode=OneWay}" Name="listBox1" Width="727">
<ListBox.ItemTemplate>
<DataTemplate DataType="String">
<TextBlock>
<Hyperlink NavigateUri="{Binding}" RequestNavigate="Hyperlink_RequestNavigate">
<TextBlock Text="{Binding}" />
</Hyperlink>
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>