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.
Şimdi kullanıcının notu düzenlemesine izin veren bir sayfa oluşturacak ve ardından notu kaydetmek veya silmek için kodu yazacaksınız.
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: not sayfası - başlangıç.
İlk olarak, yeni sayfayı projeye ekleyin:
Visual Studio'nun Çözüm Gezgini bölmesinde WinUINotes>Ekle>... öğesine sağ tıklayın.
Yeni Öğe Ekle iletişim kutusunda, pencerenin sol tarafındaki şablon listesinde WinUI'yi seçin. Ardından Boş Sayfa (WinUI) şablonunu seçin. Dosyayı NotePage.xamlolarak adlandırın ve Ekle'yi seçin.
Dosya NotePage.xaml , sayfanın kullanıcı arabirimini temsil eden tüm XAML işaretlemesini görüntüleyen yeni bir sekmede açılır.
<Grid> ... </Grid>XAML'deki öğesini aşağıdaki işaretlemeyle değiştirin:<Grid Padding="16" RowSpacing="8"> <Grid.RowDefinitions> <RowDefinition Height="*"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="400"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <TextBox x:Name="NoteEditor" AcceptsReturn="True" TextWrapping="Wrap" PlaceholderText="Enter your note" Header="New note" ScrollViewer.VerticalScrollBarVisibility="Auto" Width="400" Grid.Column="1"/> <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Spacing="4" Grid.Row="1" Grid.Column="1"> <Button Content="Save" Style="{StaticResource AccentButtonStyle}"/> <Button Content="Delete"/> </StackPanel> </Grid>CTRL + S tuşlarına basarak, araç çubuğunda kaydet simgesine tıklayarak veya Dosya> Kaydet menüsünü seçerek dosyayıkaydedinNotePage.xaml.
Uygulamayı şu anda çalıştırırsanız, yeni oluşturduğunuz not sayfasını görmezsiniz. Bunun nedeni, onu yine de
MainWindowiçindekiFramedenetiminin içeriği olarak ayarlamanız gerektiğidir.Açın MainWindow.xaml ve
NotePageöğesini SourcePageType olarakFrameiçinde ayarlayın, örneğin:<Frame x:Name="rootFrame" Grid.Row="1" SourcePageType="local:NotePage"/>Şimdi uygulamayı çalıştırdığınızda,
FramebirNotePageörneği yükleyecek ve kullanıcıya gösterecektir.
Önemli
XAML ad alanı (xmlns) eşlemeleri , C# using deyimine karşılık gelen XAML'lerdir.
local: uygulama projenizin xmlns:local="using:WinUINotes" içindeki XAML sayfalarında sizin için eşlenmiş bir ön ektir. Tüm XAML dosyalarının, x:Class özniteliği ve kodunu içeren ve App.xaml gibi oluşturulan ad alanına başvurması için eşleme yapılır. Bu ad alanında XAML'de kullanmak istediğiniz özel sınıfları tanımladığınız sürece, XAML'deki özel türlerinize başvurmak için ön eki kullanabilirsiniz local: .
Şimdi sayfaya yerleştirilen XAML denetimlerinin temel bölümlerini ayıralım:
Grid.RowDefinitions ve Grid.ColumnDefinitions, 2 satır ve 3 sütun içeren bir kılavuz tanımlar (başlık çubuğunun altına yerleştirilir).
- Alt satır, içeriğine (iki düğme) uyacak şekilde otomatik olarak boyutlandırılır (
Auto). Üst satırda kalan tüm dikey boşluk (*) kullanılır. - Ortadaki sütun epx genişliğindedir
400ve not düzenleyicisinin gittiği yerdir. İki taraftaki sütunlar boş ve kalan tüm yatay boşluğu aralarında böler (*).
Uyarı
Ölçeklendirme sisteminin çalışma şekli nedeniyle, XAML uygulamanızı tasarlarken, gerçek fiziksel pikselleri değil, etkili pikselleri tasarlarsınız. Etkin pikseller (epx), sanal bir ölçü birimidir ve ekran yoğunluğundan bağımsız olarak düzen boyutlarını ve aralığını ifade etmek için kullanılır.
- Alt satır, içeriğine (iki düğme) uyacak şekilde otomatik olarak boyutlandırılır (
<TextBox x:Name="NoteEditor" ... > ... </TextBox>, çok satırlı metin girişi için yapılandırılmış bir metin girişi denetimidir (TextBox) ve (Gridöğesinin üst orta hücresineGrid.Column="1"yerleştirilir). Satır ve sütun dizinleri 0 tabanlıdır ve varsayılan olarak denetimler üstGridöğesinin 0. satırına ve 0. sütununa yerleştirilir. Bu nedenle bu, Satır 0, Sütun 1'i belirtmenin eşdeğeridir.<StackPanel Orientation="Horizontal" ... > ... </StackPanel>, alt öğelerini dikey (varsayılan) veya yatay olarak yığan bir düzen denetimi (StackPanel) tanımlar.Grid(Grid.Row="1" Grid.Column="1") öğesinin alt orta hücresine yerleştirilir.Uyarı
Grid.Row="1" Grid.Column="1"XAML ekli özelliklerine bir örnektir. Eklenen özellikler, bir XAML nesnesinin farklı bir XAML nesnesine ait bir özellik ayarlamasına izin verir. Genellikle, bu durumda olduğu gibi alt öğeler, kullanıcı arabiriminde nasıl sunulacakları konusunda üst öğelerini bilgilendirmek için ekli özellikleri kullanabilir.İki
<Button>denetim<StackPanel>'in içindedir ve yatay olarak konumlandırılmıştır. Sonraki bölümde düğmelerin tıklama olaylarını işlemek için kodu ekleyeceksiniz.
Belgelerde daha fazla bilgi edinin:
- XAML ile duyarlı düzenleri
- Düzen panelleri
- XAML namespace'ler ve namespace eşleme
Not yükleme ve kaydetme
Kod-arkası NotePage.xaml.cs dosyasını açın. Yeni bir XAML dosyası eklediğinizde, kod-arkasında oluşturucuda tek bir satır bulunur, bu da InitializeComponent yöntemine bir çağrıdır.
namespace WinUINotes
{
public sealed partial class NotePage : Page
{
public NotePage()
{
this.InitializeComponent();
}
}
}
InitializeComponent yöntemi XAML işaretlemesini okur ve işaretleme tarafından tanımlanan tüm nesneleri başlatır. Nesneler üst-alt ilişkilerine bağlanır ve kodda tanımlanan olay işleyicileri XAML'de ayarlanan olaylara eklenir.
Şimdi, notları yükleme ve kaydetme işlemlerini ele almak için NotePage.xaml.cs code-behind dosyasına kod ekleyeceksiniz.
NotePagesınıfına aşağıdaki değişken tanımlamalarını ekleyin.public sealed partial class NotePage : Page { private StorageFolder storageFolder = ApplicationData.Current.LocalFolder; private StorageFile? noteFile = null; private string fileName = "note.txt";Not kaydedildiğinde, metin dosyası olarak uygulamanın yerel depolama alanına kaydedilir.
Uygulamanın yerel veri klasörüne erişmek için StorageFolder sınıfını kullanırsınız. Bu klasör uygulamanıza özgü olduğundan, buraya kaydedilen notlara diğer uygulamalar tarafından erişilemiyor. Bu klasöre kaydedilen metin dosyasına erişmek için StorageFile sınıfını kullanırsınız. Dosyanın adı değişkeniyle
fileNametemsil edilir. ŞimdilikfileNameiçin "note.txt" olarak ayarlayın.Not sayfasının Loaded olayı için bir olay işleyicisi oluşturun.
public NotePage() { this.InitializeComponent(); // ↓ Add this. ↓ Loaded += NotePage_Loaded; } // ↓ Add this event handler method. ↓ private async void NotePage_Loaded(object sender, RoutedEventArgs e) { noteFile = (StorageFile)await storageFolder.TryGetItemAsync(fileName); if (noteFile is not null) { NoteEditor.Text = await FileIO.ReadTextAsync(noteFile); } }Bu yöntemde, klasörden metin dosyasını almak için TryGetItemAsync'i çağırırsınız. Dosya mevcut değilse,
nulldöner. Dosya varsa, denetimin Text özelliğineNoteEditordosyadan metni okumak için ReadTextAsync'i çağırın. (Unutmayın,NoteEditorXAML dosyasında oluşturduğunuz denetimdir. Kod dosyanızdaki arka plan kodunu kullanarakTextBoxburada, ona atadığınızx:Nameile başvurursunuz.)Önemli
Dosya erişim çağrıları zaman uyumsuz olduğundan bu yöntemi anahtar sözcüğüyle
asyncişaretlemeniz gerekir. Kısacası,...Asyncile biten bir yöntemi çağırdığınızda (örneğinTryGetItemAsync), çağrıya await işlecini ekleyebilirsiniz. Bu, beklenen çağrı tamamlanana kadar sonraki kodun yürütülmesini engeller ve kullanıcı arabiriminizin yanıt vermesini sağlar. "awaitkullandığınızda, çağırdığınız yöntemin async anahtar sözcüğüyle işaretlenmiş olması gerekir." Daha fazla bilgi için bkz. C# dilinde zaman uyumsuz API'leri çağırma.
Belgelerde daha fazla bilgi edinin:
Olay işleyicileri ekleme
Ardından Kaydet ve Sil düğmeleri için Click olay işleyicilerini ekleyin. Olay işleyicileri eklemek, uygulamalarınızı oluştururken sık sık yapacağınız bir şeydir, bu nedenle Visual Studio bunu kolaylaştırmak için çeşitli özellikler sağlar.
Dosyada NotePage.xaml,
Contentözniteliğinden sonra, imlecinizi KaydetButtondenetimine getirin.Click=yazın. Bu noktada Visual Studio aşağıdakine benzer bir otomatik tamamlama kullanıcı arabirimi açmalıdır:
- Aşağı ok tuşuna basarak Yeni Olay İşleyicisi'ni< seçin> ve ardından Sekme tuşuna basın. Visual Studio özniteliğini ile
Click="Button_Click"tamamlar ve arka planda kod dosyasında adlıButton_ClickNotePage.xaml.cs bir olay işleyicisi yöntemi ekler.
Şimdi yöntemini daha anlamlı bir adla
Button_Clickyeniden adlandırmanız gerekir. Bunu aşağıdaki adımlarda yapacaksınız.- Aşağı ok tuşuna basarak Yeni Olay İşleyicisi'ni< seçin> ve ardından Sekme tuşuna basın. Visual Studio özniteliğini ile
NotePage.xaml.cs içinde sizin için eklenen metodu bulun.
private void Button_Click(object sender, RoutedEventArgs e) { }Tavsiye
Uygulamanızda kodu bulmak için Visual Studio başlık çubuğunda Ara'ya tıklayın ve Kod Arama seçeneğini kullanın. Kodu kod düzenleyicisinde açmak için arama sonucuna çift tıklayın.
İmlecinizi "B"
Buttonöğesinin önüne getirin ve yazınSave. Biraz bekleyin, yöntem adı yeşil renkle vurgulanır.Yöntem adının üzerine geldiğinizde Visual Studio, tornavida veya ampul simgesi içeren bir araç ipucu gösterir. Simgenin yanındaki aşağı ok düğmesine tıklayın, ardından 'Button_Click' öğesini 'SaveButton_Click' olarak yeniden adlandır'a tıklayın.
Visual Studio, yöntemini uygulamasına ilk eklediğiniz XAML dosyası da dahil olmak üzere uygulamanızın
Buttonher yerinde yeniden adlandırır.Sil düğmesi için bu adımları yineleyin ve yöntemini olarak
DeleteButton_Clickyeniden adlandırın.
Artık olay işleyicileri bağlı olduğuna göre, not dosyasını kaydetmek ve silmek için kodu ekleyebilirsiniz.
Dosyayı kaydetmek için yöntemine bu kodu
SaveButton_Clickekleyin. Yöntem imzasınıasyncanahtar sözcüğü ile güncelleştirmeniz gerektiğini unutmayın.private async void SaveButton_Click(object sender, RoutedEventArgs e) { if (noteFile is null) { noteFile = await storageFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting); } await FileIO.WriteTextAsync(noteFile, NoteEditor.Text); }Önce
noteFileoluşturulup oluşturulmadığınıSaveButton_Clickyönteminde denetlersiniz.nullise, yerel depolama klasöründe değişkenin temsil ettiğifileNameada sahip yeni bir dosya oluşturmanız ve dosyayı değişkenenoteFileatamanız gerekir. Ardından,TextBoxdenetimindeki metninoteFileile temsil edilen dosyaya yazarsınız.Dosyayı silmek için yöntemine bu kodu
DeleteButton_Clickekleyin. Yöntem imzasınıasyncanahtar sözcüğüyle burada da güncellemeniz gerekir.private async void DeleteButton_Click(object sender, RoutedEventArgs e) { if (noteFile is not null) { await noteFile.DeleteAsync(); noteFile = null; NoteEditor.Text = string.Empty; } }DeleteButton_Clickyönteminde, öncenoteFilevar olup olmadığını kontrol edersiniz. Eğer öyleyse,noteFiletarafından temsil edilen dosyayı yerel depolama klasöründen silin venoteFile'inullolarak ayarlayın. Ardından denetimdekiTextBoxmetni boş bir dizeye sıfırlayın.Önemli
Dosya sisteminden metin dosyası silindikten sonra,
noteFile'ünullolarak ayarlamak önemlidir.noteFileBunun uygulamanızdaki sistem dosyasına erişim sağlayan bir StorageFile olduğunu unutmayın. Sistem dosyası silindikten sonra,noteFileyine de sistem dosyasının nerede olduğunu gösterir, ancak artık var olmadığını bilmez. Sistem dosyasını şimdi okumaya, yazmaya veya silmeye çalışırsanız bir hata alırsınız.CTRL + S tuşlarına basarak, araç çubuğunda kaydet simgesine tıklayarak veya Dosya> Kaydet menüsünü seçerek dosyayıkaydedinNotePage.xaml.cs.
Arkaplan kod dosyasının son kodu aşağıdaki gibi görünmelidir:
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using System;
using Windows.Storage;
namespace WinUINotes
{
public sealed partial class NotePage : Page
{
private StorageFolder storageFolder = ApplicationData.Current.LocalFolder;
private StorageFile? noteFile = null;
private string fileName = "note.txt";
public NotePage()
{
this.InitializeComponent();
Loaded += NotePage_Loaded;
}
private async void NotePage_Loaded(object sender, RoutedEventArgs e)
{
noteFile = (StorageFile)await storageFolder.TryGetItemAsync(fileName);
if (noteFile is not null)
{
NoteEditor.Text = await FileIO.ReadTextAsync(noteFile);
}
}
private async void SaveButton_Click(object sender, RoutedEventArgs e)
{
if (noteFile is null)
{
noteFile = await storageFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);
}
await FileIO.WriteTextAsync(noteFile, NoteEditor.Text);
}
private async void DeleteButton_Click(object sender, RoutedEventArgs e)
{
if (noteFile is not null)
{
await noteFile.DeleteAsync();
noteFile = null;
NoteEditor.Text = string.Empty;
}
}
}
}
Notu test edin
Bu kod yerine getirdiğinizde, notunun doğru kaydedildiğinden ve yüklendiğinden emin olmak için uygulamayı test edebilirsiniz.
- F5 tuşuna basarak, araç çubuğundaki Hata Ayıkla "Başlat" düğmesine tıklayarak veyaHata Ayıklamayı> menüsünü seçerek projeyi derleyin ve çalıştırın.
- Metin giriş kutusuna yazın ve Kaydet düğmesine basın.
- Uygulamayı kapatın ve yeniden başlatın. Girdiğiniz not, cihazın depolama alanından yüklenmelidir.
- Sil düğmesine basın.
- Uygulamayı kapatın, yeniden başlatın. Size yeni bir boş not verilmelidir.
Önemli
Not kaydetme ve silme işleminin düzgün çalıştığını onayladıktan sonra yeniden yeni bir not oluşturun ve kaydedin. Sonraki adımlarda uygulamayı test etmek için kaydedilmiş bir nota sahip olmak istersiniz.
Windows developer