在WPF中从一个xaml导航到另一个xaml

时间:2014-06-18 12:05:19

标签: c# wpf xaml

尽管事实上我对WPF完全不满意,但我需要编写一个代码,在单击按钮后,应用程序应该打开另一个xaml。在网上搜索后,我按照以下方式进行了搜索:

1.我创建了两个xaml文件,即' Window1.xaml'和' Window2.xaml'。

2.在我的App.xaml'文件,我让:

<Application x:Class="DiagramDesigner.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"        
    StartupUri="Window1.xaml">

3.然后在我的&#39; Window1.xaml&#39;中,我创建了一个按钮:

<Button Name="Button" Click="Button_Click_1" MouseEnter="Button_MouseEnter_1" IsDefault="True"
        HorizontalAlignment="Center" VerticalAlignment="Center">
    Start
</Button>

4.在我的&#34; Windwo1.xaml.cs&#34;文件,我创建了这两个函数:

    private void Button_Click_1(object sender, RoutedEventArgs e)
    { 
    }

    private void Button_MouseEnter_1(object sender, MouseEventArgs e)
    {
    }

5.然后打开&#34; Window2.xaml&#34;点击按钮后,我改为:

    private void Button_Click_1(object sender, RoutedEventArgs e)
    { 
        NavigationService service = NavigationService.GetNavigationService(this);
        service.Navigate(new Uri("Window2.xaml", UriKind.RelativeOrAbsolute));
    }

但是这给了我错误,说service为空,程序崩溃了。我没有找到解决这个问题的方法。有什么建议?谢谢。

2 个答案:

答案 0 :(得分:4)

试试这个:

private void Button_Click_1(object sender, RoutedEventArgs e)
{ 
    var window = new Window2();
    window.ShowDialog();
}

您还应阅读有关NavigationService类及其方法的文档,以避免进一步混淆此类的功能。这是一个很好的起点:http://msdn.microsoft.com/en-us/library/system.windows.navigation.navigationservice.getnavigationservice%28v=vs.110%29.aspx

答案 1 :(得分:2)

NavigationService无法在使用Windowhttp://msdn.microsoft.com/en-us/library/ms750478(v=vs.110).aspx的经典WPF桌面应用程序中使用。

您可以在Page类实例之间导航,但不能在Window类实例之间导航。

您必须使用WPF. How hide/show main window from another window

中所示的技术手动显示和隐藏它