Vizuális vezérlők hozzáadása .NET MAUI-alkalmazásokhoz
Most, hogy a .NET MAUI-sablont használta az alkalmazás létrehozásához, a következő lépés a felhasználói felület hozzáadása és a kezdeti felhasználói felületi logika implementálása.
Ebben a leckében többet tudhat meg a .NET MAUI (többplatformos alkalmazás felhasználói felület) alkalmazásainak és navigációs struktúráinak építőelemeiről.
Mi található a .NET MAUI-projektben?
Az összegzéshez egy .NET MAUI-projekt kezdetben a következőket tartalmazza:
Az alkalmazásobjektum létrehozásához és konfigurálásához szükséges kódot tartalmazó MauiProgram.cs fájl.
Az App.xaml és App.xaml.cs fájlok, amelyek felhasználói felületi erőforrásokat biztosítanak, és létrehozzák az alkalmazás kezdeti ablakát.
Az AppShell.xaml és AppShell.xaml.cs fájlok, amelyek meghatározzák az alkalmazás kezdeti lapját, és kezelik a navigációs útválasztáshoz szükséges lapok regisztrációját.
A MainPage.xaml és MainPage.xaml.cs fájlok, amelyek meghatározzák a lap elrendezését és felhasználói felületi logikáját, amelyek alapértelmezés szerint megjelennek a kezdeti ablakban.
Szükség szerint további lapokat is hozzáadhat az alkalmazáshoz, és további osztályokat hozhat létre az alkalmazás által igényelt üzleti logika implementálásához.
A .NET MAUI-projektek emellett olyan alapértelmezett alkalmazáserőforrásokat is tartalmaznak, mint a képek, ikonok és betűtípusok, valamint az egyes platformok alapértelmezett rendszerindító kódja.
Az alkalmazásosztály
Az App
osztály a .NET MAUI-alkalmazás egészét jelöli. Örökli az alapértelmezett viselkedéskészletet a következőtől Microsoft.Maui.Controls.Application
: . Az előző leckéből felidézheti, hogy a App
bootstrap-kód az osztály, amelyet a rendszerindító kód példányosít és betölt az egyes platformokon. Az App
osztálykonstruktor általában létrehozza az AppShell
osztály egy példányát, és hozzárendeli a MainPage
tulajdonsághoz. Ez a kód vezérli a felhasználó által a definíciók alapján megjelenő első képernyőt AppShell
.
Az alkalmazásosztály a következőket is tartalmazza:
Az életciklus-események kezelésére szolgáló módszerek, beleértve azt is, hogy az alkalmazás mikor kerül a háttérbe (vagyis amikor megszűnik az előtérbeli alkalmazás).
Az alkalmazás új
Windows
létrehozásának módszerei. A .NET MAUI-alkalmazás alapértelmezés szerint egyetlen ablakkal rendelkezik, de több ablakot is létrehozhat és elindíthat, ami asztali és táblagépes alkalmazásokban hasznos.
Felület
A .NET többplatformos alkalmazás felhasználói felülete (.NET MAUI) Rendszerhéj csökkenti az alkalmazásfejlesztés összetettségét azáltal, hogy biztosítja a legtöbb alkalmazás által igényelt alapvető funkciókat, többek között a következőket:
- Egyetlen hely egy alkalmazás vizuális hierarchiájának leírására.
- Gyakori navigációs felhasználói felület.
- URI-alapú navigációs séma, amely lehetővé teszi az alkalmazás bármely oldalára való navigálást.
- Integrált keresési kezelő.
A .NET MAUI Shell-alkalmazásokban az alkalmazás vizualizációs hierarchiáját egy olyan osztály írja le, amely a Shell osztályt alosztályozza. Ez az osztály három fő hierarchikus objektumból állhat:
-
FlyoutItem
vagyTabBar
. Az AFlyoutItem
egy vagy több elemet jelöl a úszó ablakban, és akkor kell használni, ha az alkalmazás navigációs mintájának úszó panelre van szüksége. Az ATabBar
az alsó fülsávot jelöli, amelyet akkor érdemes használni, ha az alkalmazás navigációs mintája alsó lapokkal kezdődik, és nem igényel úszó panelt. -
Tab
, amely csoportosított tartalmat jelöl, alsó fülek szerint navigálva. -
ShellContent
, amely az egyes lapok ContentPage-objektumait jelöli.
Ezek az objektumok nem egyetlen felhasználói felületet sem képviselnek, hanem az alkalmazás vizuális hierarchiájának rendszerezését. A Shell felveszi ezeket az objektumokat, és létrehozza a tartalom navigációs felhasználói felületét.
Oldalak
A lapok a .NET MAUI felhasználói felületi hierarchiájának gyökerét képezik egy Shell
. Eddig a látott megoldás tartalmaz egy úgynevezett MainPage
osztályt. Ez az osztály a legegyszerűbb és leggyakoribb oldaltípusból ContentPage
származik. A tartalomoldalak egyszerűen megjelenítik a tartalmát. A .NET MAUI számos más beépített laptípust is tartalmaz, többek között a következőket:
TabbedPage
: A lapnavigációhoz használt gyökérlap. A többlapos lapok gyermekoldal-objektumokat tartalmaznak; minden laphoz egyet.FlyoutPage
: Lehetővé teszi egy mester/részlet stílusú bemutató implementálását. A szórólapok az elemek listáját tartalmazzák. Amikor kijelöl egy elemet, megjelenik egy nézet, amely megjeleníti az elem részleteit.
Más laptípusok is elérhetők, és többnyire különböző navigációs minták engedélyezésére használhatók többképernyős alkalmazásokban.
Nézetek
A tartalomoldalak általában megjelenítenek egy nézetet. A nézet lehetővé teszi az adatok meghatározott módon történő lekérését és megjelenítését. A tartalomoldalak alapértelmezett nézete egy ContentView
olyan nézet, amely az elemeket aktuális állapotban jeleníti meg. Ha zsugorítja a nézetet, előfordulhat, hogy az elemek eltűnnek a megjelenítésből, amíg át nem méretezi a nézetet. A ScrollView
lehetővé teszi az elemek megjelenítését egy görgetőablakban; ha az ablakot zsugorítja, felfelé és lefelé görgetve jelenítheti meg az elemeket. Az A CarouselView
egy görgethető nézet, amely lehetővé teszi, hogy a felhasználó pöccintsen egy elemgyűjteményen. A rendszer CollectionView
lekérheti az adatokat egy elnevezett adatforrásból, és minden elemet sablonnal jeleníthet meg formátumként. Számos más nézet is elérhető.
Vezérlők és elrendezések
A nézetek egyetlen vezérlőt, például gombot, címkét vagy szövegdobozt tartalmazhatnak. (Szigorúan véve a nézet maga egy vezérlő, így egy nézet egy másik nézetet is tartalmazhat.) Az egyetlen vezérlőre korlátozott felhasználói felület azonban nem lenne olyan hasznos, ezért a vezérlők elrendezésben vannak elhelyezve. Az elrendezés határozza meg azokat a szabályokat, amelyekkel a vezérlők egymáshoz képest jelennek meg. Az elrendezés is vezérlő, így hozzáadhatja egy nézethez. Ha megtekinti az alapértelmezett MainPage.xaml fájlt, a lap/nézet/elrendezés/vezérlőhierarchia működés közben jelenik meg. Ebben az XAML-kódban az VerticalStackLayout
elem csak egy másik vezérlő, amely lehetővé teszi az egyéb vezérlők elrendezésének finomhangolását.
<ContentPage ...>
<ScrollView ...>
<VerticalStackLayout>
<Image ... />
<Label ... />
<Label ... />
<Button ... />
</VerticalStackLayout>
</ScrollView>
</ContentPage>
Az elrendezések definiálásához használt gyakori vezérlők némelyike a következő:
VerticalStackLayout
ésHorizontalStackLayout
, amelyek optimalizált veremelrendezések, amelyek egy felülről lefelé vagy balról jobbra verem vezérlőit helyezik el. Az AStackLayout
is elérhető, amelynek van egy tulajdonságaStackOrientation
, amelyet beállíthat vagyHorizontal
megadhatVertical
. Táblagépen vagy telefonon a tulajdonság alkalmazáskódban való módosítása lehetővé teszi a kijelző beállítását, ha a felhasználó elforgatja az eszközt:AbsoluteLayout
, amely lehetővé teszi a vezérlők pontos koordinátáinak beállítását.FlexLayout
, amely hasonló ahhoz a kivételhezStackLayout
, hogy lehetővé teszi a gyermekvezérlők burkolásához, ha azok nem férnek el egyetlen sorban vagy oszlopban. Ez az elrendezés a különböző képernyőméretekhez való igazítást és igazítást is lehetővé teszi. A vezérlők példáulFlexLayout
függőleges elrendezés esetén balra, jobbra vagy középre igazíthatják a gyermekvezérlőt. Ha vízszintesen van igazítva, a vezérlőket a egyenletes térköz biztosítása érdekében meg lehet indokolni. Egy vízszintesFlexLayout
belsőScrollView
kerettel vízszintesen görgethető képkockákat jeleníthet meg (mindegyik keret lehet függőlegesen elrendezettFlexLayout
):Grid
, amely a vezérlőelemeket egy ön által megadott oszlop- és sorhely szerint helyezi el. Megadhatja az oszlop- és sorméreteket, valamint azok szélességét, így a rácselrendezések nem feltétlenül rendelkeznek "ellenőrzőtábla-megjelenéssel".
Az alábbi képen az alábbi gyakori elrendezéstípusok kulcsattribútumait összegzi:
A veremelrendezés négy, függőlegesen elrendezett dobozt jelenít meg. Az abszolút elrendezés négy dobozt jelenít meg a képernyőn, pontosan ott, ahol a fejlesztő megadta. A Flex-elrendezés több, a képernyőn elhelyezett dobozt jelenít meg, hogy a legjobban kihasználhassa a képernyőterületet. A Rács elrendezés több dobozt jelenít meg a képernyőn egy rácsmintában.
Minden vezérlő rendelkezik tulajdonságokkal. Ezeknek a tulajdonságoknak a kezdeti értékeit az XAML (Bővíthető alkalmazásjelölési nyelv) használatával állíthatja be. Ezeket a tulajdonságokat sok esetben módosíthatja az alkalmazás C#-kódjában. Az alapértelmezett .NET MAUI-alkalmazásban például a Clicked
gomb eseményét kezelő kód a következőképpen néz ki:
int count = 0;
private void OnCounterClicked(object sender, EventArgs e)
{
count+=5;
if (count == 1)
CounterBtn.Text = $"Clicked {count} time";
else
CounterBtn.Text = $"Clicked {count} times";
SemanticScreenReader.Announce(CounterBtn.Text);
}
Ez a kód módosítja a Text
lap CounterBtn vezérlőelemének tulajdonságát. Akár teljes oldalakat, nézeteket és elrendezéseket is létrehozhat a kódban; nem kell XAML-t használnia. Vegyük például egy lap következő XAML-definícióját:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Phoneword.MainPage">
<ScrollView>
<VerticalStackLayout>
<Label Text="Current count: 0"
Grid.Row="0"
FontSize="18"
FontAttributes="Bold"
x:Name="CounterLabel"
HorizontalOptions="Center" />
<Button Text="Click me"
Grid.Row="1"
Clicked="OnCounterClicked"
HorizontalOptions="Center" />
</VerticalStackLayout>
</ScrollView>
</ContentPage>
A C# megfelelő kódja így néz ki:
public partial class TestPage : ContentPage
{
int count = 0;
// Named Label - declared as a member of the class
Label counterLabel;
public TestPage()
{
var myScrollView = new ScrollView();
var myStackLayout = new VerticalStackLayout();
myScrollView.Content = myStackLayout;
counterLabel = new Label
{
Text = "Current count: 0",
FontSize = 18,
FontAttributes = FontAttributes.Bold,
HorizontalOptions = LayoutOptions.Center
};
myStackLayout.Children.Add(counterLabel);
var myButton = new Button
{
Text = "Click me",
HorizontalOptions = LayoutOptions.Center
};
myStackLayout.Children.Add(myButton);
myButton.Clicked += OnCounterClicked;
this.Content = myScrollView;
}
private void OnCounterClicked(object sender, EventArgs e)
{
count++;
counterLabel.Text = $"Current count: {count}";
SemanticScreenReader.Announce(counterLabel.Text);
}
}
A C# kód részletesebb, de nagyobb rugalmasságot biztosít a felhasználói felület dinamikus adaptálására.
Ha meg szeretné jeleníteni ezt a lapot, amikor az alkalmazás elindul, állítsa be az TestPage
osztályt főként AppShell
ShellContent
:
<ShellContent
Title="Home"
ContentTemplate="{DataTemplate local:TestPage}"
Route="TestPage" />
Elrendezés finomhangolása
Hasznos, ha egy kis légzési helyet ad egy vezérlőhöz. Minden vezérlőnek van egy Margin
tulajdonsága, amelyet az elrendezések tiszteletben tartanak. A margóra úgy gondolhat, mint a mások eltolását lehetővé taszító vezérlőelemre.
Minden elrendezésnek van egy Padding
tulajdonsága is, amely megakadályozza, hogy gyermekeik közel kerülhessenek az elrendezés szegélyéhez. Ennek a koncepciónak az egyik módja, hogy az összes vezérlő egy dobozban van, és a doboz párnázott falakkal rendelkezik.
Egy másik hasznos whitespace beállítás a Spacing
tulajdonsága VerticalStackLayout
vagy HorizontalStackLayout
. Ez beállítja a helyet az elrendezés összes gyermeke között. Az érték a vezérlő saját margójával együtt additív, így a tényleges térköz plusz margó.