Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Esta parte do tutorial adiciona a peça final ao aplicativo, a navegação entre a página de todas as anotações e a página de notas individuais.
Antes de escrever qualquer código para lidar com a navegação no aplicativo, vamos descrever o comportamento de navegação esperado.
No AllNotesPage, há a coleção de notas existentes e um botão Nova nota .
- Clicar em uma nota existente deve navegar até a página da nota e carregar a nota que foi clicada.
- Clicar no botão Nova nota deve navegar até a página da nota e carregar uma nota vazia e não salva.
Na página de notas, você adicionará um botão Voltar e haverá botões Salvar e Excluir .
- Clicar no botão Voltar deve navegar de volta para a página de todas as notas, descartando quaisquer alterações feitas na nota.
- Clicar no botão Excluir deve excluir a nota e, em seguida, navegar de volta.
Nova nota
Primeiro, você lidará com a navegação para uma nova nota.
Sugestão
Você pode baixar ou visualizar o código para este tutorial no repositório GitHub. Para ver o código como está nesta etapa, consulte esta confirmação: navegação - nova nota.
Em AllNotesPage.xaml, localize o
AppBarButtonpara uma nova nota.Adicione um manipulador de
Clickeventos e renomeie-o paraNewNoteButton_Click. (Consulte Adicionar manipuladores de eventos na etapa da página de anotações se precisar de um lembrete de como fazer isso.)<AppBarButton Icon="Add" Label="New note" Click="NewNoteButton_Click"/>NewNoteButton_ClickNo método (em AllNotesPage.xaml.cs), adicione este código:private void NewNoteButton_Click(object sender, RoutedEventArgs e) { // ↓ Add this. ↓ Frame.Navigate(typeof(NotePage)); }
Cada Page tem uma propriedade Frame que fornece uma referência à ocorrência de Frame à qual pertence Page (se houver). Isso é o Frame que você chama de método Navigate aqui. O Navigate método usa o Tipo da página para a qual você deseja navegar. Você obtém isso Type em C# usando o typeof operador.
Se você executar o aplicativo agora, poderá clicar no botão Nova nota para navegar até a página de anotações e digitar no editor de notas. No entanto, se você tentar salvar a nota, nada acontecerá. Isso ocorre porque uma instância do Note modelo ainda não foi criada na página de anotações. Você vai fazer isso agora.
Abra NotePage.xaml.cs.
Adicione código para substituir o método OnNavigatedTo da página.
public NotePage() { this.InitializeComponent(); } // ↓ Add this. ↓ protected override void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); noteModel = new Note(); }
Agora, quando você navega para NotePage, uma nova instância do Note modelo é criada.
Notas existentes
Agora você adicionará navegação para anotações existentes. Atualmente, quando você clica na nota no ItemsView, a nota é selecionada, mas nada acontece. O comportamento padrão para a maioria dos controles de coleção é a seleção única, o que significa que um item é selecionado de cada vez. Você atualizará o ItemsView para que, em vez de selecioná-lo, você possa clicar em um item como um botão.
Sugestão
Você pode baixar ou visualizar o código para este tutorial no repositório GitHub. Para ver o código como está nesta etapa, consulte esta confirmação: navegação - aplicativo final.
Abra AllNotesPage.xaml.
Atualize o XAML para o
ItemsViewcom SelectionMode = None e IsItemInvokedEnabled =True.Adicione um manipulador para o evento ItemInvoked .
<ItemsView ItemsSource="{x:Bind notesModel.Notes}" Grid.Row="1" Margin="24" ItemTemplate="{StaticResource NoteItemTemplate}" <!-- ↓ Add this. ↓ --> SelectionMode="None" IsItemInvokedEnabled="True" ItemInvoked="ItemsView_ItemInvoked">Em AllNotesPage.xaml.cs, encontre o
ItemsView_ItemInvokedmétodo. (Se o Visual Studio não o criou para você, o que pode acontecer se você copiar e colar o código, adicione-o na próxima etapa.)No método, adicione código
ItemsView_ItemInvokedpara navegar atéNotePage. Desta vez, você usará uma sobrecarga do método Navigate que permite passar um objeto para a outra página. Passe o invocadoNotecomo o segundo parâmetro de navegação.private void ItemsView_ItemInvoked(ItemsView sender, ItemsViewItemInvokedEventArgs args) { Frame.Navigate(typeof(NotePage), args.InvokedItem); }Abra NotePage.xaml.cs.
Atualize a substituição de
OnNavigatedTométodo para manipular oNoteque é passado pela chamada paraNavigate.protected override void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); // ↓ Update this. ↓ if (e.Parameter is Note note) { noteModel = note; } else { noteModel = new Note(); } // ↑ Update this. ↑ }Neste código, você primeiro verifica se o parâmetro passado é um
Noteobjeto. Se for, atribua-o como modeloNotepara a página. Se fornullou não umNote, crie um novoNotecomo antes.
Navegação traseira
Por fim, você precisa atualizar o aplicativo para que você possa navegar de volta de uma nota individual para a página de todas as notas.
O controle WinUI TitleBar inclui um botão Voltar que atende a todas as diretrizes do Fluent Design para posicionamento e aparência. Você usará este botão integrado para navegação de volta.
Abra MainWindow.xaml.
Atualize o XAML para o
TitleBarcom IsBackButtonVisible =Truee IsBackButtonEnabled vinculados à propriedade Frame.CanGoBack .Adicione um manipulador para o evento BackRequested . Seu XAML deve ter esta aparência:
<TitleBar x:Name="AppTitleBar" Title="WinUI Notes" IsBackButtonVisible="True" IsBackButtonEnabled="{x:Bind rootFrame.CanGoBack, Mode=OneWay}" BackRequested="AppTitleBar_BackRequested">Aqui, a propriedade IsBackButtonVisible é definida como
true. Isso faz com que o botão Voltar apareça no canto superior esquerdo da janela do aplicativo.Em seguida, a propriedade IsBackButtonEnabled está vinculada à propriedade Frame.CanGoBack , portanto, o botão Voltar é habilitado somente se o quadro puder navegar de volta.
Finalmente, o manipulador de eventos BackRequested é adicionado. É aqui que você coloca o código para navegar de volta.
No MainWindow.xaml.cs, adicione este código ao
AppTitleBar_BackRequestedmétodo:private void AppTitleBar_BackRequested(TitleBar sender, object args) { // ↓ Add this. ↓ if (rootFrame.CanGoBack == true) { rootFrame.GoBack(); } // ↑ Add this. ↑ }A
Frameclasse mantém o controle da navegação em seu BackStack, para que você possa navegar de volta para páginas anteriores simplesmente chamando o método GoBack . É uma prática recomendada sempre verificar a propriedade CanGoBack antes de ligarGoBackpara .
Em seguida, você precisa atualizar o código para NotePage navegar de volta depois que a nota for excluída.
Abra NotePage.xaml.cs.
Atualize o
DeleteButton_Clickmétodo manipulador de eventos com uma chamada para o método depois queFrame.CanGoBacka nota for excluída:private async void DeleteButton_Click(object sender, RoutedEventArgs e) { if (noteModel is not null) { await noteModel.DeleteAsync(); } // ↓ Add this. ↓ if (Frame.CanGoBack == true) { Frame.GoBack(); } // ↑ Add this. ↑ }
Sugestão
Você deve ter notado que em NotePage, você chama Frame.GoBack, enquanto em MainWindow você chama rootFrame.GoBack. Isso ocorre porque a classe Page tem uma propriedade Frame que obtém a Frame que está hospedando o Page, se houver. Neste caso, recebe uma referência a rootFrame.
Agora você pode executar seu aplicativo. Tente adicionar novas notas, navegar entre notas e eliminar notas.
Saiba mais nos documentos:
- Implementar navegação entre duas páginas
- Histórico de navegação e navegação para retroceder
- Classe Frame, classe Page
Próximos passos
Parabéns! Você concluiu o tutorial Criar um aplicativo WinUI !
Os links a seguir fornecem mais informações sobre como criar aplicativos com WinUI e o SDK de Aplicativo do Windows:
Windows developer