Zpracování událostí v XAML
Po vytvoření uživatelského rozhraní XAML můžete přidat kód pro reakci na interakce, ke kterým dochází při návštěvě stránky uživatelem. .NET MAUI upozorní aplikaci uživatelského vstupu a interakcí prostřednictvím standardních událostí .NET.
V této lekci se dozvíte, jak tyto události zpracovat a provádět operace očekávané uživatelem.
Pojmenování elementů na stránce XAML
Kód pro zpracování událostí často potřebuje odkazovat na konkrétní ovládací prvky a jejich vlastnosti na stránce. Každému ovládacímu prvku můžete přiřadit jedinečný název. K tomu použijte atribut x:Name
XAML . Atribut x:Name
dělá dvě věci:
Přidá privátní pole do vygenerovaného souboru za kódem, který je mapován na tento prvek. Toto pole v kódu použijte k interakci s elementem vizuálu, který nastaví vlastnosti modulu runtime a zpracuje události.
Díky tomuto názvu je prvek známý jazykem XAML. Tyto prvky můžete odkazovat z jiných prvků definovaných ve stejném souboru XAML.
Při pojmenování elementu nelze použít libovolný řetězec. Hodnota přiřazená atributu x:Name
slouží k vytvoření pole v kódu. Místo toho musí odpovídat zásadám vytváření názvů pro proměnnou. Název musí být také jedinečný, protože je zkompilován do definice kódu za kódem.
Jakmile zadáte název elementu, můžete s tímto prvkem pracovat v souboru kódu. Následující fragment XAML definuje Label
ovládací prvek. Jmenuje se CounterLabel (tento příklad je převzat z výchozí aplikace, vygeneruje se šablona .NET MAUI):
<Label Text="Current count: 0"
...
x:Name="CounterLabel"
... />
V kódu této stránky můžete na tento ovládací prvek odkazovat prostřednictvím CounterLabel
pole a upravit jeho vlastnosti:
count++;
CounterLabel.Text = $"Current count: {count}";
Důležité
Pole nebude inicializováno, dokud InitializeComponent
se nespustí metoda stránky. Tato metoda je součástí procesu analýzy XAML a vytváření instancí objektů. Po tomto volání umístěte veškerý kód, který komunikuje s prvkem definovaným v XAML. Výjimkou tohoto pravidla je ContentPage
samotná třída. Před spuštěním InitializeComponent
metody můžete přistupovat ke všem vlastnostem třídy. Pokud však nastavíte jakékoli vlastnosti této třídy v XAML, tyto hodnoty vlastností přepíší všechny hodnoty, které jste mohli nastavit před spuštěním InitializeComponent
.
Použití atributu k připojení událostí
Mnoho ovládacích prvků zveřejňuje vlastnosti, které odpovídají událostem, na které mohou tyto ovládací prvky reagovat, například Clicked
událost tlačítka. Různé ovládací prvky podporují různé sady událostí. Button
Například ovládací prvek může reagovat na Clicked
, Pressed
a Released
události, zatímco Entry
ovládací prvek obsahuje události, například TextChanged
. Vlastnost události můžete inicializovat v kódu XAML stránky a zadat název metody, která se má spustit při aktivaci události. Metoda události musí splňovat následující požadavky na podpis:
- Nemůže vrátit hodnotu; metoda musí být
void
. - Musí mít dva parametry;
object
odkaz, který označuje objekt, který aktivoval událost (označovaný jako odesílatel) aEventArgs
parametr, který obsahuje všechny argumenty předané obslužné rutině události odesílatelem. - Obslužná rutina události by měla být
private
. Tato akce se nevynucuje, ale pokud nastavíte obslužnou rutinu události jako veřejnou, stane se přístupnou pro vnější svět a vyvolá se jiná akce než očekávaná událost, která se aktivuje. - Obslužná rutina události může být
async
, pokud potřebuje spustit asynchronní operace.
Následující příklad ukazuje definici Clicked
obslužné rutiny události pro tlačítko v ukázkové aplikaci ze šablony .NET MAUI. Název metody se řídí standardní konvencí; Za ním následuje název ovládacího prvku (tlačítko má název Čítač) a název události (kliknuto). Tato konvence se nevynucuje, ale je vhodné:
private void OnCounterClicked(object sender, EventArgs e)
{
...
}
Oddělení obav
Zapojení událostí v XAML je pohodlné, ale kombinuje chování ovládacího prvku s definicí uživatelského rozhraní. Mnoho vývojářů dává přednost tomu, aby tyto prvky byly odlišné a všechny odběry obslužných rutin událostí v kódu za pojmenovanými prvky. Je jednodušší zjistit, co je připojeno a kde je namapováno chování. Tato metoda také znesnadňuje náhodné přerušení kódu odebráním obslužné rutiny v XAML bez jeho realizace. Kompilátor nezachytí odebranou obslužnou rutinu a stane se jen problémem, když kód toto chování neprovádí správně.
Bez ohledu na to, jestli se rozhodnete připojit obslužné rutiny událostí pomocí XAML nebo pomocí kódu, je otázkou osobního výběru.
Pokud chcete připojit obslužnou rutinu události v kódu, použijte +=
operátor k přihlášení k odběru události. Tuto operaci obvykle provádíte v konstruktoru stránky za voláním InitializeComponent
:
public partial class MainPage : ContentPage, IPage
{
public MainPage()
{
InitializeComponent();
Counter.Clicked += OnCounterClicked;
}
...
private void OnCounterClicked(object sender, EventArgs e)
{
...
}
}
Poznámka:
Tento přístup můžete použít k přihlášení k odběru více metod zpracování událostí pro stejnou událost. Každá metoda zpracování událostí se spustí, když dojde k události, i když byste neměli předpokládat, že se spustí v žádném konkrétním pořadí, takže mezi nimi nezaveďte žádné závislosti.
Podobně můžete obslužnou rutinu události odebrat zrušením odběru události z události pomocí operátora -=
později v aplikaci:
Counter.Clicked -= OnCounterClicked;