MC, 11:48 środa, 11.02.2015 r.
Ilustracja do artykułu: WPF - Tworzenie hiperłącza otwieranego w zewnętrznym oknie przeglądarki internetowej

WPF - Tworzenie hiperłącza otwieranego w zewnętrznym oknie przeglądarki internetowej

W tym artykule tworzymy hiperłącze w aplikacjach WPF otwierające się w oknie przeglądarki internetowej.

W czym leży problem?

Technologia WPF dostarcza nam kontrolki Hyperlink jednak działa ona w obrębie strony w aplikacji, czyli nie możemy pozwolić użytkownikowi na otworzenie strony internetowej w nowym oknie przeglądarki, a przynajmniej nie w sposób domyślny. To co możemy jednak zrobić, to w podłączyć się do zdarzenia RequestNavigate i zdecydować o otworzeniu okna przeglądarki pod wskazanym adresem w logice aplikacji.

Jak otworzyć stronę internetową w oknie przeglądarki?

Zacznijmy od poniższej konstrukcji w widoku aplikacji (XAML):
<TextBlock>
<Hyperlink NavigateUri="http://www.mblog.boo.pl" RequestNavigate="Hyperlink_RequestNavigate">
www.mblog.boo.pl
</Hyperlink>
</TextBlock>

Co my tu mamy... Widzimy zdefiniowany w we własności NavigateUrl adres strony, którą chcemy otworzyć a także nazwę metody eventa RequestNavigate ustaloną na Hyperlink_RequestNavigate. Myślę, że wszystko na tym etapie jest jasne, czas więc na implementację metody Hyperlink_RequestNavigate w code-behind widoku.

A może ona wyglądać następująco:

private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e)
{
Process.Start(new ProcessStartInfo(e.Uri.AbsoluteUri));
e.Handled = true;
}

Jak widać, metoda ta jest bardzo prosta, a najważniejszą jej częścią jest użycie metody Start() obiektu Process, która pozwala nam na uruchomienie zewnętrznego procesu, w tym wypadku domyślnej przeglądarki internetowej, ponieważ jako adres przekazujemy Uri z obiektu eventa, który odpowiada wartości z własności NavigateUrl zdefiniowanej w kontrolce Hyperlink. Ot i cały zabieg.

Oczywiście aplikacje WPF proszą się o użycie wzorca MVVM, co w tym przypadku nie jest żadnym problemem - bez trudu możemy logikę eventu przenieść do logiki komendy w ViewModelu.

Komentarze (0) - Nikt jeszcze nie komentował - bądź pierwszy!

Imię:
Treść: