2010-12-19 18 views
1

私は最初のWPFアプリケーションで作業しています。今日でも少しのレンガの壁にぶつかった。クリック可能なリンクを使用したListBoxへのバインド

私のアプリは、検索エンジンの検索とリンクの取得というウェブ検索ユーザーの役割を果たしています。私はクリック可能な形式でリンクを表示したいと思います。結果として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ハンドラを追加しようとしました。私は間違って何をしていますか?

答えて

6

私の問題は、あなたのDataTemplateがあなたのリストアイテムと何らかの形で関連付けられていないことだと思います。リソースセクションでDataTemplateを定義するだけでなく(キーのないスタイルのようには動作しません)、ListBox.ItemTemplateを指定する必要があります。

<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> 
+0

すごくお返事ありがとうございました! ListBox内でDataTemplateを定義することができない理由を理解していないのですがしかし、私が言ったように、これは私の最初のWPFアプリです。 – hackerhasid

関連する問題