| 

.NET C# Java Javascript Exception

2
Will heißen: In der Liste sind Hyperlinks enthalten. Wenn ich auf einen Link klicke, geht die zugehörige Website im Browser auf. Die Texte und die Urls werden der Listbox per XML über die Eigenschaft ItemsSource übergeben.
News:
15.02.2011
Karl Maradona 21 2
2 Antworten
0
Da du bereits Hyperlinks in die Liste aufnehmen kannst, hier mal ein Beispiel wie du im Code-Behind die Hyperlinks erstellen musst:
Hyperlink link = new Hyperlink();
link.Inlines.Add("Super Link");
link.NavigateUri = new System.Uri("http://www.google.de/");
15.02.2011
Konstantin 3,7k 1 8
Danke. Wie so ein Hyperlink dann in die Listbox kommt, ist durchaus auch mein Problem. :-)
Karl Maradona 15.02.2011
0
Ich hatte mir dazu mal eine Klasse geschrieben, damit das Event bei jedem Link gleich mit registriert wird.

public class Link : Hyperlink
{
public Link(string uri)
{
this.RequestNavigate += new RequestNavigateEventHandler(Link_RequestNavigate);

this.NavigateUri = new Uri(uri);
this.Inlines.Add(uri);
}

void Link_RequestNavigate(object sender, RequestNavigateEventArgs e)
{
Process.Start(this.NavigateUri.ToString());
}
}


Um es einer Listbox hinzuzufügen kannst du dann folgenden Code verwenden.

XAML
<ListBox Name="lb2" ItemsSource="{Binding Hyperlinks}"/>

CodeBehind:
public List<TextBlock> Hyperlinks { get; set; }
lb2.DataContext = this;

TextBlock hyperlinks = new TextBlock();
hyperlinks.Inlines.Add(new Link("http://www.biggle.de/"));
hyperlinks.Inlines.Add(Environment.NewLine);
hyperlinks.Inlines.Add(new Link("http://www.google.de/"));

Hyperlinks = new List<TextBlock>();
Hyperlinks.Add(hyperlinks);


Wobei ich das NewLine eher als Hack ansehe, musst mal schauen, was da anders machen kannst ;)

Wenn du den Hyperlink aber einzeln im XAML verwenden willst, schau dir dazu mal mein HowTo "Eigenes Hyperlink Control" an. Hier kannst du die Klasse Link in einem benutzerdefinierten UserControl verwenden.


Edit: Nice Tipp von Konstantin
Link.cs:
public class Link : Hyperlink
{
public Link(string uri)
{
Click += (o, e) => Process.Start(NavigateUri.ToString());

this.NavigateUri = new Uri(uri);
this.Inlines.Add(uri);
}
}
15.02.2011
Mario Priebe 6,0k 3 9
1
Das kannst du aber auch verkürzen :-P

public class Link : Hyperlink
{
public WpfHyperlink()
{
Click += (o, e) =>
Process.Start(NavigateUri.ToString());
}
}
Konstantin 15.02.2011
merkwürdiger konstruktor :p
Mario Priebe 15.02.2011
aber trotzdem nice +1
Mario Priebe 15.02.2011
Bei mir heißt er WpfHyperlink und ich hab vergessen den Konstruktor an dein Beispiel anzupassen... Ich wusste das sowas kommt :D
Konstantin 16.02.2011

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH