Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Teď vytvoříte stránku, která uživateli umožní upravit poznámku a pak napíšete kód pro uložení nebo odstranění poznámky.
Návod
Kód pro účely tohoto kurzu si můžete stáhnout nebo zobrazit z úložiště GitHub. Pokud chcete zobrazit kód, jak je v tomto kroku, podívejte se na toto potvrzení: poznámková stránka – počáteční.
Nejprve přidejte novou stránku do projektu:
V podokně Průzkumník řešení sady Visual Studio klikněte pravým tlačítkem myši na projekt >Přidat>novou položku....
V dialogovém okně Přidat novou položku vyberte WinUI v seznamu šablon na levé straně okna. Dále vyberte šablonu Prázdná stránka (WinUI 3 ). Pojmenujte soubor NotePage.xamla pak vyberte Přidat.
Soubor NotePage.xaml se otevře na nové kartě a zobrazí se všechny kódy XAML, které představují uživatelské rozhraní stránky.
<Grid> ... </Grid>Nahraďte prvek v XAML následujícím kódem:<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>Uložte soubor stisknutím kombinace kláves CTRL+S, kliknutím na ikonu Uložit na panelu nástrojů nebo výběrem nabídky>NotePage.xaml .
Pokud aplikaci spustíte právě teď, nezobrazí se stránka s poznámkami, kterou jste právě vytvořili. Je to proto, že ho stále potřebujete nastavit jako obsah
Frameovládacího prvku vMainWindow.Otevřete MainWindow.xaml a nastavte
NotePagejako SourcePageType na následujícíFrame:<Frame x:Name="rootFrame" Grid.Row="1" SourcePageType="local:NotePage"/>Když teď aplikaci spustíte,
Framenačte instanciNotePagea zobrazí ji uživateli.
Důležité
Mapování oboru názvů XAML (xmlns) jsou protějšek XAML příkazu jazyka C# using .
local: je předpona mapovaná pro vás na stránkách XAML projektu aplikace (xmlns:local="using:WinUINotes"). Mapuje se tak, aby odkazoval na stejný obor názvů, který je vytvořený tak, aby obsahoval x:Class atribut a kód pro všechny soubory XAML včetně App.xaml. Pokud definujete vlastní třídy, které chcete použít v XAML v tomto stejném oboru názvů, můžete použít předponu local: k odkazování na vlastní typy v XAML.
Pojďme rozdělit klíčové části ovládacích prvků XAML umístěné na stránce:
Grid.RowDefinitions a Grid.ColumnDefinitions definují mřížku se 2 řádky a 3 sloupci (umístěné pod záhlavím).
- Dolní řádek se automaticky přizpůsobí
Autojeho obsahu, dvěma tlačítky. Horní řádek používá všechny zbývající svislé mezery (*). - Prostřední sloupec je
400epx široký a je místo, kde editor poznámek jde. Sloupce na obou stranách jsou prázdné a rozdělí všechny zbývající vodorovné mezery mezi ně (*).
Poznámka:
Vzhledem k tomu, jak funguje systém škálování, při návrhu aplikace XAML navrhujete efektivní pixely, nikoli skutečné fyzické pixely. Efektivní pixely (epx) jsou virtuální měrnou jednotkou a používají se k vyjádření rozměrů rozložení a mezer nezávisle na hustotě obrazovky.
- Dolní řádek se automaticky přizpůsobí
<TextBox x:Name="NoteEditor" ... > ... </TextBox>je ovládací prvek pro zadávání textu (TextBox) nakonfigurovaný pro zadávání víceřádkového textu a je umístěn v horní prostřední buňceGrid(Grid.Column="1"). Indexy řádků a sloupců jsou založené na 0 a ve výchozím nastavení jsou ovládací prvky umístěny v řádku 0 a sloupci 0 nadřazenéhoGridobjektu . Toto je tedy ekvivalent zadání řádku 0, sloupce 1.<StackPanel Orientation="Horizontal" ... > ... </StackPanel>definuje ovládací prvek rozložení (StackPanel), který naskládá podřízené položky svisle (výchozí) nebo vodorovně. Je umístěn ve středu dolní buňkyGrid(Grid.Row="1" Grid.Column="1").Poznámka:
Grid.Row="1" Grid.Column="1"je příkladem připojených vlastností XAML. Připojené vlastnosti umožňují jednomu objektu XAML nastavit vlastnost, která patří do jiného objektu XAML. Podobně jako v tomto případě můžou podřízené prvky používat připojené vlastnosti k informování nadřazeného prvku o tom, jak mají být prezentovány v uživatelském rozhraní.Uvnitř jsou
<Button>dva<StackPanel>ovládací prvky a uspořádané vodorovně. Do další části přidáte kód pro zpracování událostí kliknutí na tlačítka.
Další informace najdete v dokumentaci:
Načtení a uložení poznámky
NotePage.xaml.cs Otevřete soubor kódu za kódem. Když přidáte nový soubor XAML, kód za sebou obsahuje jeden řádek v konstruktoru, volání InitializeComponent metody:
namespace WinUINotes
{
public sealed partial class NotePage : Page
{
public NotePage()
{
this.InitializeComponent();
}
}
}
Metoda InitializeComponent přečte kód XAML a inicializuje všechny objekty definované značkou. Objekty jsou propojené ve svých relacích nadřazeného a podřízeného objektu a obslužné rutiny událostí definované v kódu jsou připojeny k událostem nastaveným v xaml.
Teď do souboru s kódem přidáte kód NotePage.xaml.cs pro zpracování načítání a ukládání poznámek.
Do třídy přidejte následující deklarace proměnných
NotePage:public sealed partial class NotePage : Page { private StorageFolder storageFolder = ApplicationData.Current.LocalFolder; private StorageFile? noteFile = null; private string fileName = "note.txt";Když se poznámka uloží, uloží se do místního úložiště aplikace jako textový soubor.
Třídu StorageFolder použijete pro přístup k místní datové složce aplikace. Tato složka je specifická pro vaši aplikaci, takže k poznámkám uloženým tady nemají přístup jiné aplikace. Třída StorageFile slouží pro přístup k textovému souboru uloženému v této složce. Název souboru je reprezentován proměnnou
fileName. Prozatím nastavtefileName"note.txt".Vytvořte obslužnou rutinu události pro událost načtenou na stránce poznámek.
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); } }V této metodě zavoláte TryGetItemAsync k načtení textového souboru ze složky. Pokud soubor neexistuje, vrátí
null. Pokud soubor existuje, zavolejte ReadTextAsync ke čtení textu ze souboru doNoteEditorvlastnosti Text ovládacího prvku. (Nezapomeňte, že jeNoteEditorto ovládací prvek,TextBoxkterý jste vytvořili v souboru XAML. Tady na něj odkazujete v souboru s kódem pomocíx:Namepřiřazeného souboru.)Důležité
Tuto metodu musíte označit klíčovým slovem
async, protože volání přístupu k souboru jsou asynchronní. Stručně řečeno, pokud zavoláte metodu, která končí...Async(napříkladTryGetItemAsync), můžete do volání přidat operátor await . Tím se následný kód počká, dokud se očekávané volání neskončí a nebude reagovat na uživatelské rozhraní. Při použitíawaitmusí být metoda, ze které voláte, označena asynchronním klíčovým slovem. Další informace najdete v tématu Volání asynchronních rozhraní API v jazyce C#.
Další informace najdete v dokumentaci:
- Přístup k souborům a složkám pomocí rozhraní API WinRT
- Volání asynchronních rozhraní API v jazyce C#
Přidání obslužných rutin událostí
Dále přidejte obslužné rutiny události Click pro tlačítka Uložit a Odstranit . Přidání obslužných rutin událostí je něco, co budete často dělat při vytváření aplikací, takže Visual Studio nabízí několik funkcí, které vám usnadní práci.
NotePage.xaml V souboru umístěte kurzor za
Contentatribut v ovládacím prvku UložitButton. ZadejteClick=. V tomto okamžiku by sada Visual Studio měla zobrazit automaticky dokončené uživatelské rozhraní, které vypadá takto:
- Stisknutím klávesy se šipkou dolů vyberte <Nová obslužná rutina> události a pak stiskněte klávesu Tab. Visual Studio dokončí atribut s
Click="Button_Click"a přidá metodu obslužné rutiny události pojmenovanouButton_Clickv NotePage.xaml.cs souboru kódu za kódem.
Teď byste měli metodu
Button_Clickpřejmenovat na něco smysluplnějšího. Provedete to v následujících krocích.- Stisknutím klávesy se šipkou dolů vyberte <Nová obslužná rutina> události a pak stiskněte klávesu Tab. Visual Studio dokončí atribut s
V NotePage.xaml.csčásti vyhledejte metodu, která byla přidána za vás:
private void Button_Click(object sender, RoutedEventArgs e) { }Návod
Pokud chcete vyhledat kód v aplikaci, klikněte na tlačítko Hledat v záhlaví sady Visual Studio a použijte možnost Hledání kódu . Poklikáním na výsledek hledání otevřete kód v editoru kódu.
Umístěte kurzor před "B" a
ButtonzadejteSave. Chvíli počkejte a název metody se zvýrazní zelenou barvou.Když najedete myší na název metody, visual Studio zobrazí popisek s ikonou šroubováku nebo žárovky. Klikněte na tlačítko se šipkou dolů vedle ikony a potom klikněte na Přejmenovat Button_Click na SaveButton_Click.
Visual Studio přejmenuje metodu všude ve vaší aplikaci, včetně souboru XAML, do kterého jste ji poprvé přidali do
Buttonsouboru .Opakujte tyto kroky pro tlačítko Delete a přejmenujte metodu na
DeleteButton_Click.
Teď, když jsou obslužné rutiny událostí připojeny, můžete přidat kód pro uložení a odstranění souboru poznámky.
Přidejte tento kód do
SaveButton_Clickmetody pro uložení souboru. Všimněte si, že musíte také aktualizovat podpis metody klíčovým slovemasync.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); }SaveButton_ClickV metodě nejprve zkontrolujete, jestlinoteFilese vytvořilo. Pokud anonull, musíte vytvořit nový soubor ve složce místního úložiště s názvem reprezentovaným proměnnoufileNamea přiřadit soubor proměnnénoteFile. Pak napíšete text v ovládacímTextBoxprvku do souboru reprezentovanénoteFile.Přidejte tento kód do
DeleteButton_Clickmetody pro odstranění souboru. Podpis metody je potřeba aktualizovat také tímto klíčovým slovemasync.private async void DeleteButton_Click(object sender, RoutedEventArgs e) { if (noteFile is not null) { await noteFile.DeleteAsync(); noteFile = null; NoteEditor.Text = string.Empty; } }DeleteButton_ClickV metodě nejprve zkontrolujete, jestlinoteFileexistuje. Pokud ano, odstraňte soubor reprezentovanýnoteFilez místní složky úložiště a nastavtenoteFilenanull. Potom resetujte text v ovládacímTextBoxprvku na prázdný řetězec.Důležité
Po odstranění textového souboru ze systému souborů je důležité nastavit
noteFile.nullMějte na paměti, ženoteFileje soubor StorageFile , který poskytuje přístup k systémovému souboru ve vaší aplikaci. Po odstranění systémového souboru stále odkazuje na místo,noteFilekde byl systémový soubor, ale neví, že už neexistuje. Pokud se teď pokusíte systémový soubor přečíst, zapsat nebo odstranit, zobrazí se chyba.Uložte soubor stisknutím kombinace kláves CTRL+S, kliknutím na ikonu Uložit na panelu nástrojů nebo výběrem nabídky>NotePage.xaml.cs .
Konečný kód pro soubor s kódem by měl vypadat takto:
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;
}
}
}
}
Otestování poznámky
S tímto kódem můžete aplikaci otestovat, abyste měli jistotu, že se poznámka uloží a načte správně.
- Sestavte a spusťte projekt stisknutím klávesy F5, klikněte na tlačítko Spustit "Start" na panelu nástrojů nebo výběrem nabídky Spustit>ladění.
- Zadejte text do textového pole a stiskněte tlačítko Uložit .
- Zavřete aplikaci a restartujte ji. Zadaná poznámka by se měla načíst z úložiště zařízení.
- Stiskněte tlačítko Odstranit .
- Zavřete aplikaci a restartujte ji. Měla by se zobrazit nová prázdná poznámka.
Důležité
Jakmile potvrdíte, že ukládání a odstraňování poznámek funguje správně, vytvořte a znovu uložte novou poznámku. V dalších krocích budete chtít uložit poznámku k otestování aplikace.
Windows developer