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.
Eğitimin bu bölümü, uygulamaya son parçayı ekleyerek tüm notlar sayfası ile her bir not sayfası arasında gezinmeyi sağlar.
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 notaya tıklamak, not sayfasına giderek 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ıklamak, notta yapılan değişiklikleri yok sayarak tüm notlar sayfasına geri dönmelidir.
- Sil düğmesine tıklanması notu silmeli ve ardından önceki sayfaya dönmelidir.
Yeni not
İlk olarak, yeni bir not için gezintiyi yöneteceksiniz.
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: navigation - new note.
AllNotesPage.xaml dosyasında yeni bir not için
AppBarButtonbulun.Bir
Clickolay işleyicisi ekleyin ve olarak yeniden adlandırınNewNoteButton_Click. (Not sayfası adımında olay işleyicileri ekleme konusunu hatırlatmaya ihtiyacınız varsa, olay işleyicileri ekleme kısmına 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 Sayfa'nın, ait olduğu Çerçeve örneğine başvuru sağlayan bir Çerçeve özelliği vardır (varsa). 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. C# dilinde Type öğesini typeof işleciyle elde edersiniz.
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(); }
Artık NotePage adresine gittiğinizde, Note modelinin yeni bir örneği oluşturulur.
Mevcut notlar
Şimdi mevcut notlar için gezinti ekleyeceksiniz. Şu anda, ItemsView içinde notaya tıkladığınızda, nota seçilir 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: navigation - son uygulama.
AllNotesPage.xaml dosyasını açın.
ItemsViewSelectionMode = None ve IsItemInvokedEnabled =Trueile XAML'yi güncelleştirin.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.)ItemsView_ItemInvokedyöntemineNotePageiçin kod ekleyerek geçiş yapın. 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.
OnNavigatedToyöntemi geçersiz kılmasını,NoteöğesiniNavigateçağrısının geçirmesi nedeniyle işlemek için gü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. EğernullveyaNotedeğilse, daha önce olduğu gibi yeni birNoteoluşturun.
Arka gezinti
Son olarak, tek bir nottan tüm notlar sayfasına geri dönebilmek için uygulamayı güncelleştirmeniz gerekir.
WinUI 3 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.
XAML'yi
TitleBarIsBackButtonVisible =True'nin ve IsBackButtonEnabled'nin Frame.CanGoBack özelliğine bağlı olacak şekilde güncelleyin.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, gezinmeyi BackStack'ini takip eder, böylece GoBack yöntemini çağırarak yalnızca önceki sayfalara geri dönebilirsiniz. çağrısından önce her zamanGoBacközelliğini denetlemek en iyi uygulamadır.
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
NotePage içinde Frame.GoBack çağrısını yaparken, MainWindow içinde rootFrame.GoBack çağırdığınızı fark etmiş olabilirsiniz. Bunun nedeni, Page sınıfının, eğer varsa, öğesini barındıran Frame öğesini alan bir Page özelliğine sahip olmasıdır. Bu durumda, rootFrame öğesine bir başvuru alı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!
Bu eğitim, işleri basit tutmak ve bazı temel kavramları tanıtmak amacıyla verimlilikten ziyade sadeliğe odaklandı ve özellikleri en temel düzeyde ele aldı. Bu nedenle uygulama çalışırken, geliştirilebilen bazı şeyler vardır.
Daha fazla bilgi edinmek için bu devam eğitimlerinden biriyle devam etmenizi öneririz:
WinUI Notları bölüm 2 – Gezinti ve veri bağlama ile ilgili diğer özellikleri açıklar. Aynı temel mimariyi koruyarak uygulamayı daha verimli çalışacak şekilde güncelleştireceksiniz.
OR
WinUI'de veri bağlama, bağımlılık ekleme ve birim testi – Model-View-ViewModel (MVVM) tasarım deseni ile veri bağlama, bağımlılık ekleme ve birim testi uygulama adımlarını gösterir. MVVM Araç Seti'ni kullanmak için uygulamayı değiştirecek ve modelleri görüntüleyebilirsiniz.
Windows developer