Создание страниц или Windows в WPF - PullRequest
9 голосов
/ 17 июня 2010

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

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

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

Ответы [ 4 ]

11 голосов
/ 17 июня 2010

Используйте 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, чтобы помочь с этим.

2 голосов
/ 18 октября 2012

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

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

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

1 голос
/ 17 июня 2010

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

0 голосов
/ 17 июня 2010

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

Application.Current.MainWindow = new SecondWindowToBeDisplayed();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...