2010-04-25 59 views
9

Tengo 2 páginas Necesito navegar mainpage.xaml a login.page xaml pero me arroja Referencia del objeto no establecida en una instancia de un objeto. en Root.Children.Clear(); ....¿Cómo puedo navegar una página xaml a otra?

i añadidos este códigos en App.xaml:

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

y que i ADDE algunos códigos en main.xaml para navegar a 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()); 
     } 
    } 
}

¿Cómo puedo navegar de main.xaml a LoginUI.xaml?

Respuesta

11

Me gusta AnthonyWJones dijo que necesita utilizar el marco de navegación.

En primer lugar, tendrá que añadir una referencia a System.Windows.Controls.Navigation en su proyecto y refernce en que MainPage.xaml

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

A continuación, se necesita un marco dentro, donde puedes cambiar diferentes páginas XAML. Algo como esto:

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

ahora en algún lugar de MainPage.xaml usted podría tener un botón con una etiqueta

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

y en el Button_Click eventhandler usted podría cambiar el contenido mostrado en 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)); 
} 

Una cosa divertida a tener en cuenta es que al utilizar el navegador NavigationFramework atrás y botones de avance funcionar a la perfección y la URL en las actualizaciones Addressbar dependiendo de la página XAML que se encuentra actualmente :)

2

Parece que comenzó con el pie izquierdo. Este tipo de cosas se atiende con la plantilla de la aplicación de navegación. Debería comenzar un nuevo proyecto y seleccionar "Silverlight Navigation Application".

Una vez cargado simplemente ejecútelo para ver cómo es el caparazón básico. Luego, observe cómo está estructurado MainPage y diga la vista de Inicio. Lo que tendrá que hacer es crear nuevas vistas basadas en el tipo de navegación Page y luego agregarlas a MainPage.xaml.

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)); 
     } 

    } 
} 
12

Supongamos que usted está viendo la MainPage.xaml entonces usted desea abrir otra página XAML llamado newPage.xaml haciendo clic en un Button o un ImageEdit en el MainPage.xaml, aquí está la solución rápida que debe escribir en el interior del MainPage.xaml.cs:

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

Esto es trabajar conmigo.

+0

Trabajando para mí también ... si ya tiene el 'void Button_Click_1 privado (remitente del objeto, RoutedEventArgs e)' para el control del botón, entonces no copie la primera línea, aparte de que funciona perfecto y fácil. – DevCompany

+0

Aunque ha estado funcionando, la URL no parece estar cambiando. –

1

Prueba esto:

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

Está funcionando para mí. :)

Cuestiones relacionadas