Как я могу перейти от одной страницы xaml к другой? - PullRequest
9 голосов
/ 25 апреля 2010

У меня есть 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?

Ответы [ 6 ]

12 голосов
/ 17 августа 2012

Предположим, что вы просматриваете MainPage.xaml, затем вы хотите открыть другую страницу xaml под названием newPage.xaml, нажав Button или ImageEdit в MainPage.xaml, вот быстрое решение, которое вы должны написать внутри 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;
}

Это работает со мной.

11 голосов
/ 03 мая 2010

Как и 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, на которой вы сейчас находитесь:

2 голосов
/ 25 апреля 2012

Простой для решения этой проблемы, вы можете посмотреть на этом сайте: http://blogs.microsoft.co.il/blogs/eladkatz/archive/2011/01/25/adapting-silverlight-navigation-to-mvvm.aspx.

У меня была эта проблема раньше. Но после прочтения этого урока я легко могу перейти к другому представлению с помощью MVVM. Надеюсь, что это может помочь вам решить проблему. Thx

2 голосов
/ 25 апреля 2010

Похоже, вы начали не с той ноги. Такие вещи предназначены для использования шаблона приложения Navigation. Вы должны начать новый проект и выбрать «Приложение навигации Silverlight».

После загрузки просто запустите его, чтобы увидеть, как выглядит базовая оболочка. Затем взгляните на структуру MainPage и скажите «Домашний вид». Вам нужно будет создать новые представления на основе типа навигации Page и добавить их в MainPage.xaml.

1 голос
/ 22 апреля 2015

Попробуйте это:

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

Это работает для меня. :)

1 голос
/ 13 июля 2011
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)); 
        }

    }
}
...