Создание страниц или 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();