2011-08-17 43 views
1

我正在用WPF構建桌面應用程序,並希望在瀏覽器中打開超鏈接。我可以通過在後面的代碼中放置一個方法並從XAML調用它來完成此操作,但是如何從多個XAML頁面調用此方法?如何從XAML調用另一個名稱空間中的方法

XAML

<Hyperlink NavigateUri="http://www.mylink.com" RequestNavigate="Hyperlink_RequestNavigate">My link text</Hyperlink> 

C#

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

回答

3

你可以把這個變成一個風格App.xaml,例如

<Application.Resources> 
    <Style x:Key="LaunchLinkStyle" TargetType="{x:Type Hyperlink}"> 
     <EventSetter Event="RequestNavigate" Handler="LaunchLinkStyle_RequestNavigate" /> 
    </Style> 
</Application.Resources> 

處理程序然後當然會在App.xaml.cs實施)

然後,您可以只引用樣式:

<Hyperlink Style="{StaticResource LaunchLinkStyle}" ... /> 
0

感謝H.B.你的回答使我走上了正確的道路。下面是完整的代碼:

在我的網頁:

<Hyperlink NavigateUri="http://www.mylink.com" Style="{StaticResource LaunchLinkStyle}">My Link</Hyperlink> 

的App.xaml

<Style x:Key="LaunchLinkStyle" TargetType="{x:Type Hyperlink}"> 
     <EventSetter Event="RequestNavigate" Handler="LaunchLinkStyle_RequestNavigate"/> 
    </Style> 

App.xaml.cs

public void LaunchLinkStyle_RequestNavigate(object sender, RoutedEventArgs e) 
    { 
     /* Function loads URL in separate browser window. */ 
     Hyperlink link = e.OriginalSource as Hyperlink; 
     Process.Start(link.NavigateUri.AbsoluteUri); 
     e.Handled = true; //Set this to true or the hyperlink loads in application and browser windows 
    } 
相關問題