Создание страниц или Windows в WPF

Я новичок в использовании WPF. У меня есть следующая программа, которую я хочу создать: -Приложение открывается одной кнопкой -Пользователь нажимает кнопку и переносит их на новую страницу с различным вводом.

Я запутался в том, как мне нужно это сделать. Я пытался открыть новое окно, но я не хочу, чтобы окно открывалось, я хочу, чтобы оно было все одно окно. Я попытался создать новую страницу и перейти к ней с помощью NavigationService, но не смог заставить ее работать.

По сути, я хочу создать рабочий процесс, в котором пользователь вводит некоторые данные, нажимает кнопку "Далее" и переносится на новую страницу для ввода дополнительной информации. Может кто-то указать мне верное направление?

4 ответа

Решение

Используйте Pages в вашем приложении и используйте NavigationService для переключения между ними.

Например, если у вас есть две страницы в вашем приложении, "Page1" и "Page2", вы можете включить в Page1.xaml следующее:

<Button Content="Next" Click="NextClicked" />

и это в вашем Page1.xaml.cs:

void NextClicked(object sender, RoutedEventArgs e)
{
  NavigationService.Navigate(new Page2());
}

В качестве альтернативы вы можете использовать это:

  NavigationService.Navigate(new Uri("Page2.xaml", UriKind.Relative));

Как правило, это проще сделать первым, потому что вы также можете установить свойства Page2. Например, если у Page2 есть открытое свойство CurrentItem, вы можете сказать:

  NavigationService.Navigate(new Page2 { CurrentItem = this.Something });

Вы не можете сделать это с помощью синтаксиса на основе Uri.

Вы также можете создавать экземпляры различных страниц (Page1, Page2 и т. Д.) И сохранять их в своем объекте Application, а затем переключаться на них следующим образом:

  NavigationSerivce.Navigate(App.Page2);

Таким образом, если вы когда-нибудь перейдете к Page2 позже, вы получите точно такой же объект Page2. В качестве альтернативы вы можете использовать функцию ведения журнала NavigationService, чтобы помочь с этим.

Использование NavigationService является правильным способом сделать это. Вы должны добавить рамку в свои окна, чтобы показать свои страницы, а затем перемещаться между ними с помощью NavigationService.

Первоначально, кажется, нет большой разницы в предпочтениях того, что следует использовать: страницы или Windows. Однако, взглянув на предполагаемую цель приложения, я бы предложил использовать UserControls вместо Pages, поскольку страницы, похоже, ориентированы на веб-контент, хотя их можно использовать и в автономных приложениях. Другой аргумент, приведенный в другом посте, ссылается на документацию MSDN и указывает на то, что при использовании страницы окно NavigationWindow, в котором оно размещено, не запоминает экземпляр содержимого, к которому осуществляется переход, и, таким образом, другие методы WPF. необходимы для хранения этого контента в истории навигации.

NavigationWindow не сохраняет экземпляр объекта контента в истории навигации. Вместо этого NavigationWindow создает новый экземпляр объекта содержимого каждый раз, когда к нему осуществляется переход с использованием истории переходов. Это поведение предназначено для предотвращения чрезмерного потребления памяти при переходе к большим числам и большим частям контента. Следовательно, состояние содержимого не запоминается при переходе от одной навигации к другой. Однако WPF предоставляет несколько методов, с помощью которых вы можете сохранить часть состояния для части контента в истории навигации.

Если вы используете UserControl, у вас не будет такой проблемы, если ваша цель в любом случае создать собственное приложение. Вы можете загрузить этот шаблон в качестве примера, чтобы использовать вместо него UserControls.

Вы можете изменить ссылку MainWindow объекта приложения на другой объект Window.

Application.Current.MainWindow = new SecondWindowToBeDisplayed();
Другие вопросы по тегам