Как вызвать метод в другом пространстве имен из XAML - PullRequest
1 голос
/ 17 августа 2011

Я создаю настольное приложение с WPF и хочу открыть гиперссылку в браузере.Я могу сделать это, поместив метод в коде и вызвав его из 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;
    }

Ответы [ 2 ]

3 голосов
/ 17 августа 2011

Вы можете поместить это в стиль в 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 голосов
/ 19 августа 2011

Спасибо, HB. Ваш ответ направил меня на правильный путь.Вот полный код:

На моей странице:

<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
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...