如何将一个xaml页面导航到另一个页面?

时间:2010-04-25 18:04:13

标签: silverlight xaml silverlight-4.0 c#-4.0

我有2页我需要将mainpage.xaml导航到login.page xaml,但它会引发我的注意 对象引用未设置为对象的实例。在Root.Children.Clear(); ....

我在App.xaml中添加了这些代码:

   private void Application_Startup(object sender, StartupEventArgs e)
        {
            Grid myGrid = new Grid();
            myGrid.Children.Add(new MainPage());
            this.RootVisual = myGrid;
       }

并且我在main.xaml上添加了一些代码以导航到LoginUI.xaml

namespace Gen.CallCenter.UI
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();

            Grid Root = ((Grid)(this.Parent));
            Root.Children.Clear();
            Root.Children.Add(new LoginUI());
        }
    }
}

如何将main.xaml导航到LoginUI.xaml?

5 个答案:

答案 0 :(得分:11)

如同AnthonyWJones所说,你需要使用导航框架。

首先,您需要在项目中添加对System.Windows.Controls.Navigation的引用并在其中引用它MainPage.xaml

xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"

然后,您将需要一个框架,您可以在其中切换不同的XAML页面。像这样:

<navigation:Frame x:Name="navFrame" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" Source=”/Views/First.xaml” />

现在在MainPage.xaml的某个地方你可以有一个带标签的按钮

<Button Click="Button_Click" Tag="/Views/Second.xaml" Content="Second" />

Button_Click事件处理程序中,您可以切换navFrame中显示的内容。

private void Button_Click(object sender, RoutedEventArgs e)
{
    Button theButton = sender as Button;
    string url = theButton.Tag.ToString();

    this.navFrame.Navigate(new Uri(url, UriKind.Relative));
}

值得注意的是,通过使用NavigationFramework,浏览器后退和前进按钮可以正常工作,地址栏中的URL会根据您当前所在的XAML页面进行更新:)

答案 1 :(得分:2)

看起来你已经开始走错了路。使用导航应用程序模板可以满足此类需求。您应该启动一个新项目并选择“Silverlight导航应用程序”。

加载后,运行它以查看基本shell的外观。然后看看MainPage的结构如何并说出Home视图。您需要做的是根据导航Page类型创建新视图,然后将它们添加到MainPage.xaml。

答案 2 :(得分:2)

解决这个问题的简单方法,你可以看一下这个网站:http://blogs.microsoft.co.il/blogs/eladkatz/archive/2011/01/25/adapting-silverlight-navigation-to-mvvm.aspx

我之前遇到过这个问题。但在阅读本教程后,我可以轻松地使用MVVM导航到另一个视图。希望这可以帮助你解决所有问题.Thx

答案 3 :(得分:1)

private void formcombobox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    foreach (ComboBoxItem child in formcombobox.Items)
    {
        if (child.Name != null && child.IsSelected == true)
        {

            string url = new System.Uri("/DWRWefForm;component/Pages/"
                            + child.Name + ".xaml", System.UriKind.Relative).ToString();
            this.navframe.Navigate(new Uri(url, UriKind.Relative)); 
        }

    }
}

答案 4 :(得分:1)

试试这个:

private void imageEdit1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    newPage mynewPage = new newPage(); //newPage is the name of the newPage.xaml file
    this.Content = mynewPage;
}

这对我有用。 :)