3

I need to add several hyperlinks to the program's form dynamically at runtime (and handle user clicks on them).

How to do this?

I tried something like: var hlink = new Hyperlink(); myStackPanel.Children.Add(hlink);

but hyperlink is not a UIElement...

Thanks!

Vitas
  • 243
  • 4
  • 10

2 Answers2

3

It's a little bit kludgy, but you need to do this:

Label linkLabel = new Label();
Run linkText = new Run("Google");
Hyperlink link = new Hyperlink(linkText);

link.NavigateUri = new Uri("http://www.google.com");

link.RequestNavigate += new RequestNavigateEventHandler(delegate(object sender, RequestNavigateEventArgs e) {
    Process.Start(new ProcessStartInfo(e.Uri.AbsoluteUri));
    e.Handled = true; 
});

linkLabel.Content = link;

myStackPanel.Children.Add(linkLabel);

This will make a new label with the text "Google", the Uri "http://www.google.com", and when clicked it will open the Uri in the user's default browser.

Nathan Wheeler
  • 5,896
  • 2
  • 29
  • 48
2

Hyperlink is not a UI Element but you can add it as content into a Label.

In Xaml it will look like this:

<Label>
<Hyperlink Click="btnRemoveAll_Click">Remove all</Hyperlink>
</Label>

You can use it for many things just as you would use the click-event of a button.

TalkingCode
  • 13,407
  • 27
  • 102
  • 147
  • To follow up on Holli's answer, then, you would create the Hyperlink as you do above, add an event handler to it (hlink.Click += new RoutedEventHandler(hLink_Click);), create a new Label, set Label.Content = hlink;, and then myStackPanel.Children.Add(label); – Wonko the Sane Sep 22 '10 at 14:30