Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Öğreticinin bu bölümü uygulamaya son parçayı ekler, tüm notlar sayfası ile tek tek not sayfası arasında gezinme.
Uygulama içi gezintiyi işlemek için herhangi bir kod yazmadan önce beklenen gezinti davranışını açıklayalım.
içinde AllNotesPagemevcut notların koleksiyonu ve Yeni not düğmesi bulunur.
- Mevcut bir nota tıklanması, not sayfasına gitmeli ve tıklanan notu yüklemelidir.
- Yeni not düğmesine tıklanması not sayfasına gitmeli ve boş, kaydedilmemiş bir not yüklemelidir.
Not sayfasında bir geri düğmesi ekleyeceksiniz ve Kaydet ve Sil düğmeleri vardır.
- Geri düğmesine tıklanması, notta yapılan değişiklikleri atarak tüm notlar sayfasına geri dönmelidir.
- Sil düğmesine tıklanması notu silip geri dönmelidir.
Yeni not
İlk olarak, yeni bir not için gezintiyi işleyeceksiniz.
Tavsiye
Bu öğreticinin kodunu GitHub deposundan indirebilir veya görüntüleyebilirsiniz. Kodu bu adımda olduğu gibi görmek için şu işlemeye bakın: gezinti - yeni not.
AllNotesPage.xaml dosyasında yeni not için öğesini
AppBarButtonbulun.Bir
Clickolay işleyicisi ekleyin ve olarak yeniden adlandırınNewNoteButton_Click. (Bunun nasıl yapılacağını anımsatıcıya ihtiyacınız varsa not sayfası adımında olay işleyicileri ekleme bölümüne bakın.)<AppBarButton Icon="Add" Label="New note" Click="NewNoteButton_Click"/>yöntemine
NewNoteButton_Click( AllNotesPage.xaml.cs) şu kodu ekleyin:private void NewNoteButton_Click(object sender, RoutedEventArgs e) { // ↓ Add this. ↓ Frame.Navigate(typeof(NotePage)); }
Her Sayfanın ait olduğu Frame örneğine (varsa) başvuru sağlayan bir Page özelliği vardır. Burada FrameNavigate yöntemini çağırdığınız yöntem bu şekildedir.
Navigate yöntemi, gitmek istediğiniz sayfanın Türünü alır. Bunu C# dilinde işlecini Type kullanarak alırsınıztypeof.
Uygulamayı şimdi çalıştırırsanız, Not sayfasına gitmek için Yeni not düğmesine tıklayabilir ve not düzenleyicisine yazabilirsiniz. Ancak, notu kaydetmeye çalışırsanız hiçbir şey olmaz. Bunun nedeni, modelin Note bir örneğinin henüz not sayfasında oluşturulmamış olmasıdır. Bunu şimdi yapacaksın.
NotePage.xaml.cs açın.
Sayfanın OnNavigatedTo yöntemini geçersiz kılmak için kod ekleyin.
public NotePage() { this.InitializeComponent(); } // ↓ Add this. ↓ protected override void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); noteModel = new Note(); }
Şimdi adresine gittiğinizde NotePagemodelin Note yeni bir örneği oluşturulur.
Mevcut notlar
Şimdi mevcut notlar için gezinti ekleyeceksiniz. Şu anda içinde nota tıkladığınızda, not ItemsViewseçilidir, ancak hiçbir şey olmaz. Çoğu koleksiyon denetiminin varsayılan davranışı tek bir seçimdir ve bu da bir kerede bir öğenin seçildiği anlamına gelir. öğesini, seçmek yerine düğme gibi bir öğeye tıklayacak şekilde güncelleştireceksiniz ItemsView .
Tavsiye
Bu öğreticinin kodunu GitHub deposundan indirebilir veya görüntüleyebilirsiniz. Kodu bu adımda olduğu gibi görmek için şu işlemeye bakın: gezinti - son uygulama.
AllNotesPage.xaml dosyasını açın.
için XAML'yi
ItemsViewSelectionMode = None ve IsItemInvokedEnabled ile güncelleştirin =True.ItemInvoked olayı için bir işleyici ekleyin.
<ItemsView ItemsSource="{x:Bind notesModel.Notes}" Grid.Row="1" Margin="24" ItemTemplate="{StaticResource NoteItemTemplate}" <!-- ↓ Add this. ↓ --> SelectionMode="None" IsItemInvokedEnabled="True" ItemInvoked="ItemsView_ItemInvoked">AllNotesPage.xaml.cs'da yöntemini bulun
ItemsView_ItemInvoked. (Visual Studio sizin için oluşturmadıysa, kodu kopyalayıp yapıştırırsanız bu durum oluşabilir, sonraki adımda ekleyin.)yönteminde
ItemsView_ItemInvokedadresine gitmekNotePageiçin kod ekleyin. Bu kez, bir nesneyi diğer sayfaya geçirmenizi sağlayan Navigate yönteminin aşırı yüklemesini kullanacaksınız. ÇağrılanNoteöğesini ikinci gezinti parametresi olarak geçirin.private void ItemsView_ItemInvoked(ItemsView sender, ItemsViewItemInvokedEventArgs args) { Frame.Navigate(typeof(NotePage), args.InvokedItem); }NotePage.xaml.cs açın.
OnNavigatedToçağrısı tarafından geçirilen öğesini işlemekNoteiçin yöntemi geçersiz kılmayıNavigategüncelleştirin.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. ↑ }Bu kodda önce geçirilen parametrenin bir
Notenesne olup olmadığını denetlersiniz. Bu durumda, sayfa için model olarakNoteatarsınız.nullBu birNoteise veya değilse, daha önce olduğu gibi yeniNotebir oluşturun.
Arka gezinti
Son olarak, tek bir nottan tüm notlar sayfasına geri dönebilmek için uygulamayı güncelleştirmeniz gerekir.
WinUI TitleBar denetimi, yerleştirme ve görünüm için tüm Fluent Design yönergelerini karşılayan bir geri düğmesi içerir. Arka gezinti için bu yerleşik düğmeyi kullanacaksınız.
MainWindow.xaml dosyasını açın.
için XAML'yi
TitleBarFrame.CanGoBack özelliğine bağlı =Trueve IsBackButtonEnabled ile güncelleştirin.BackRequested olayı için bir işleyici ekleyin. XAML'niz şöyle görünmelidir:
<TitleBar x:Name="AppTitleBar" Title="WinUI Notes" IsBackButtonVisible="True" IsBackButtonEnabled="{x:Bind rootFrame.CanGoBack, Mode=OneWay}" BackRequested="AppTitleBar_BackRequested">Burada IsBackButtonVisible özelliği olarak
trueayarlanır. Bu, geri düğmesinin uygulama penceresinin sol üst köşesinde görünmesini sağlar.Ardından , IsBackButtonEnabled özelliği Frame.CanGoBack özelliğine bağlıdır, bu nedenle geri düğmesi yalnızca çerçeve geri gidebilirse etkinleştirilir.
Son olarak BackRequested olay işleyicisi eklenir. Geri gitmek için kodu yerleştirdiğiniz yer burasıdır.
MainWindow.xaml.cs'da şu kodu yöntemine
AppTitleBar_BackRequestedekleyin:private void AppTitleBar_BackRequested(TitleBar sender, object args) { // ↓ Add this. ↓ if (rootFrame.CanGoBack == true) { rootFrame.GoBack(); } // ↑ Add this. ↑ }Sınıfı
Frame, gezintiyi BackStack'inde izler, böylece yalnızca GoBack yöntemini çağırarak önceki sayfalara geri dönebilirsiniz. çağrısından önceGoBacközelliğini her zaman denetlemek en iyi yöntemdir.
Ardından, not silindikten sonra geri gitmek için içindeki NotePage kodu güncelleştirmeniz gerekir.
NotePage.xaml.cs açın.
DeleteButton_ClickOlay işleyicisi yöntemini, not silindikten sonra yöntemineFrame.CanGoBackyapılan bir çağrıyla güncelleştirin: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. ↑ }
Tavsiye
içinde çağrısı yaparken öğesini NotePage çağırdığını Frame.GoBackfark MainWindowetmiş rootFrame.GoBackolabilirsiniz. Bunun nedeni, Page sınıfının varsa öğesini barındıran öğesini alan bir Frame özelliğine Pagesahip olmasıdır. Bu durumda, öğesine bir başvuru rootFramealır.
Artık uygulamanızı çalıştırabilirsiniz. Yeni notlar eklemeyi, notlar arasında ileri geri gezinmeyi ve notları silmeyi deneyin.
Belgelerde daha fazla bilgi edinin:
- İki sayfa arasında gezinti uygulama
- Gezinti geçmişi ve geriye doğru gezinti
- Çerçeve sınıfı, Page sınıfı
Sonraki Adımlar
Tebrikler! WinUI uygulaması oluşturma öğreticisini tamamladınız!
Aşağıdaki bağlantılar WinUI ve Windows Uygulama SDK'sı ile uygulama oluşturma hakkında daha fazla bilgi sağlar:
Windows developer