Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ebben az oktatóanyagban megtudhatja, hogyan hozhat létre Windows megjelenítési alaprendszer (WPF) alkalmazásokat Visual Studio. A Visual Studio vezérlőket adhat hozzá az ablakokhoz, és kezelheti az eseményeket. Az oktatóanyag végére egy egyszerű alkalmazással rendelkezik, amely neveket ad hozzá egy listamezőhöz.
Ebben az útmutatóban Ön:
- Hozzon létre egy új WPF alkalmazást.
- Vezérlők hozzáadása egy ablakhoz.
- Vezérlőesemények kezelése az alkalmazásfunkciók biztosításához.
- Nyisd meg az alkalmazást.
Az alábbi oktatóanyag során létrehozott alkalmazás előnézete:
Előfeltételek
-
Visual Studio 2026
- Válassza ki a .NET asztali fejlesztési számítási feladatot
- Válassza ki a .NET 10 különálló összetevőt
WPF-alkalmazás létrehozása
Az új alkalmazás létrehozásának első lépése a Visual Studio megnyitása és az alkalmazás sablonból való létrehozása.
Nyissa meg a Visual Studio.
Válassza az Új projekt létrehozása lehetőséget.
A Sablonok keresése mezőbe írja be a wpf kifejezést, és várja meg, amíg a keresési eredmények megjelennek.
A kódnyelv legördülő menüben válassza a C# vagy Visual Basic lehetőséget.
A sablonok listájában válassza az WPF Alkalmazás, majd a Next lehetőséget.
Fontos
Ne válassza ki a WPF alkalmazás (.NET Framework) sablont.
Az alábbi képen c# és Visual Basic .NET projektsablonok láthatók. Ha a kódnyelv-szűrőt alkalmazta, a megfelelő sablon megjelenik a listában.
Az új projekt konfigurálása ablakban állítsa a Projekt nevéta Nevek értékre, és válassza a Tovább gombot.
A projekt másik mappába is menthető a Hely elérési út beállításával.
Végül a Additional information ablakban válassza .NET 10.0 (hosszú távú támogatás) a Framework beállításhoz, majd válassza a Create lehetőséget.
Miután Visual Studio létrehozta az alkalmazást, megnyitja az alapértelmezett ablak XAML tervezőablakát, MainWindow. Ha a tervező nem látható, kattintson duplán a MainWindow.xaml fájlra a Megoldáskezelő ablakban a tervező megnyitásához.
A Visual Studio fontos részei
A Visual Studio WPF támogatása öt fontos összetevővel rendelkezik, amelyekkel az alkalmazás létrehozásakor kapcsolatba léphet:
Megoldáskezelő
Ebben az ablakban minden projektfájl, kód, ablak és erőforrás megjelenik.
Tulajdonságok
Ebben az ablakban a kiválasztott elem környezete alapján konfigurálható tulajdonságbeállítások láthatók. Ha például kiválaszt egy elemet a Megoldáskezelő fájlból, a fájlhoz kapcsolódó beállítások jelennek meg. Ha a Tervezőben egy objektum van kijelölve, megjelenik a vezérlő vagy az ablak tulajdonságai.
Szerszámosláda
Az eszközkészlet tartalmazza a tervezőfelülethez hozzáadható összes vezérlőt. Ha vezérlőt szeretne hozzáadni az aktuális felülethez, kattintson duplán egy vezérlőre, vagy húzza át a vezérlőt a tervező felületre. A felhasználói felület (UI) tervezésekor gyakran az XAML-kódszerkesztő ablakát használja, miközben az XAML tervezőablakot használja az eredmények előnézetének megtekintéséhez.
XAML-tervező
Ez egy XAML-dokumentum tervezője. Interaktív, és az eszközkészletbőlhúzással helyezheti el az objektumokat. A tervező elemeinek kiválasztásával és áthelyezésével vizuálisan megírhatja az alkalmazás felhasználói felületét.
Ha a tervező és a szerkesztő is látható, az egyik módosításai megjelennek a másikban.
Amikor elemeket jelöl ki a tervezőben, a Tulajdonságok ablak megjeleníti az objektum tulajdonságait és attribútumait.
XAML-kódszerkesztő
Ez egy XAML-dokumentum XAML-kódszerkesztője. Az XAML-kódszerkesztővel kézzel hozhatja létre a felhasználói felületet tervező nélkül. A tervező automatikusan beállíthat tulajdonságokat egy vezérlőn, amikor a vezérlőt hozzáadja a tervezőhez. Az XAML-kódszerkesztő sokkal több vezérlést biztosít.
Ha a tervező és a szerkesztő is látható, az egyik módosításai megjelennek a másikban. Amikor a kódszerkesztőben navigál a szövegrészleten, a Tulajdonságok ablak megjeleníti az objektum tulajdonságait és attribútumait.
Az XAML vizsgálata
A projekt létrehozása után megnyílik az XAML-kódszerkesztő. Az ablak megjelenítéséhez minimális mennyiségű XAML-kódot jelenít meg. Ha a szerkesztő nincs megnyitva, kattintson duplán a MainWindow.xaml elemre a Megoldáskezelő ablakban. Az XAML-nek az alábbi példához hasonlóan kell megjelennie:
<Window x:Class="Names.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Names"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
</Grid>
</Window>
Fontos
Ha Visual Basic-ban kódol, az XAML kissé eltér, különösen a x:Class=".." attribútumtól. A Visual Basic XAML az objektum osztálynevét használja, és kihagyja a névteret az osztályból.
Az XAML jobb megértéséhez bontsuk le. A XAML egyszerűen XML, amelyet a WPF dolgoz fel a felhasználói felület létrehozásához. Az XAML megértéséhez legalább ismernie kell az XML alapjait.
A dokumentum gyökér az XAML-fájl által leírt objektumtípust jelöli. A fájl nyolc attribútumot deklarál, és általában három kategóriába tartoznak:
XML-névterek
Az XML-névtér struktúrát biztosít az XML-nek. Meghatározza, hogy milyen XML-tartalmat deklarálhat a fájlban.
A fő attribútum a teljes fájl XML-névterét importálja. Ebben az esetben a WPF által deklarált típusokhoz lesz leképezve. A többi XML-névtér deklarál egy előtagot, és importálja az XAML-fájl egyéb típusait és objektumait. A névtér például deklarálja a előtagot, és leképezi a projekt által deklarált objektumokat, a kódnévtérben deklarált objektumokat.
attribútum
Ez az attribútum a
<Window>-t a kód által meghatározott típusra képezi le: a MainWindow.xaml.cs, vagy a MainWindow.xaml.vb fájlra, amely a C#-ban aNames.MainWindowosztály, illetve aMainWindowa Visual Basic nyelvben.attribútum
Az XAML-objektumon deklarált bármely normál attribútum beállítja az objektum tulajdonságát. Ebben az esetben a attribútum beállítja a tulajdonságot.
Az ablak módosítása
A példaalkalmazás esetében ez az ablak túl nagy, és a címsor nem leíró. Javítsuk ki.
Először futtassa az alkalmazást az F5 billentyű lenyomásával vagy a hibakeresésistart hibakeresés kiválasztásával a menüből.
Megjelenik a sablon által létrehozott alapértelmezett ablak vezérlők nélkül, valamint a MainWindow címe:
Módosítsa az ablak címét úgy, hogy a értékre állítja.
Az ablak méretének módosításához állítsa a értékre, és a a értékre.
<Window x:Class="Names.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:Names" mc:Ignorable="d" Title="Names" Height="180" Width="260"> <Grid> </Grid> </Window>
Az elrendezés előkészítése
WPF hatékony elrendezési rendszert biztosít számos különböző elrendezésvezérlővel. Az elrendezésvezérlők segítenek a gyermekvezérlők elhelyezésében és méretében, és ezt automatikusan is megtehetik. Az ebben az XAML-ben megadott alapértelmezett elrendezésvezérlő a vezérlő.
A rács vezérlőelem lehetővé teszi a sorok és oszlopok definiálását, hasonlóan a táblázathoz, és vezérlőket helyezhet egy adott sor- és oszlopkombináció keretei közé. Tetszőleges számú gyermekvezérlőt vagy más elrendezésvezérlőt hozzáadhat a rácshoz. Elhelyezhet például egy másik vezérlőelemet egy adott sor- és oszlopkombinációban, és az új rács több sort és oszlopot definiálhat, és saját gyermekekkel rendelkezhet.
A rács vezérlőelem sorba és oszlopba helyezi a gyermekvezérlőket. A rácsok mindig egyetlen sort és oszlopot deklaráltak, ami azt jelenti, hogy a rács alapértelmezés szerint egyetlen cella. Ez az alapértelmezett beállítás nem nyújt nagy rugalmasságot a vezérlők elhelyezésében.
Módosítsa a rács elrendezését az alkalmazáshoz szükséges vezérlőkhöz.
Adjon hozzá egy új attribútumot a elemhez: .
Ez a beállítás behozza a rácsot az ablak széleiből, és egy kicsit szebbnek tűnik.
Definiáljon két sort és két oszlopot, és osztja el a rácsot négy cellára:
<Grid Margin="10"> <Grid.RowDefinitions> <RowDefinition Height="*" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> </Grid>Válassza ki a rácsot az XAML-kódszerkesztőben vagy az XAML-tervezőben. Az XAML-tervező megjeleníti az egyes sorokat és oszlopokat:
Az első vezérlő hozzáadása
Most, miután a rácsot konfigurálta, elkezdhet hozzá vezérlőket adni. Először adja hozzá a címkevezérlőt.
Hozzon létre egy új elemet a elemen belül a sor- és oszlopdefiníciók után. Az elem tartalmának beállítása a sztringértékre :
<Grid Margin="10"> <Grid.RowDefinitions> <RowDefinition Height="*" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <Label>Names</Label> </Grid>A határozza meg a tartalom . Egyes vezérlők megértik, hogyan kell kezelni a tartalmakat, mások nem. A vezérlő tartalma a tulajdonságra van leképzve. Ha xAML attribútumszintaxissal állítja be a tartalmat, használja a következő formátumot: . Mindkét módszer ugyanazt a dolgot valósítja meg, a címke tartalmát úgy állítva, hogy megjelenjen a szöveg .
A címke az ablak felét foglalja el, mivel automatikusan a rács első sorába és oszlopába van helyezve. Az első sorban nincs szükség annyi helyre, mert csak ezt a sort fogja használni a címkéhez.
Az első attribútumának módosítása -ról - ra.
A érték automatikusan a tartalom méretére állítja a rács sorát, ebben az esetben a címke méretéhez igazodva.
<Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions>A tervező ekkor megjeleníti a feliratot, amely a rendelkezésre álló magasság kis részét foglalja el. A következő sornak több helye van.
Az elhelyezés szabályozása
Beszéljünk az irányítás elhelyezéséről. Az előző szakaszban létrehozott címke automatikusan a rács 0. sorába és 0. oszlopába kerül. A sorok és oszlopok számozása 0-nál kezdődik, és 1-zel növekszik. A vezérlő nem tud semmit a rácsról, és a vezérlő nem határoz meg tulajdonságokat a rácson belüli elhelyezés szabályozásához.
Hogyan lehet azt mondani egy vezérlőnek, hogy egy másik sort vagy oszlopot használjon, ha a vezérlőelem nem ismeri a rácsot? Csatolt tulajdonságok! A rács kihasználja a WPF által biztosított tulajdonságrendszert.
A rácsvezérlő új tulajdonságokat határoz meg, amelyeket a gyermekvezérlők magukhoz csatolhatnak. A tulajdonságok valójában nem léteznek a vezérlőn, de a rácshoz való hozzáadás után elérhetővé válnak a vezérlő számára.
A rács két tulajdonságot határoz meg a gyermekvezérlő sor- és oszlopelhelyezésének meghatározásához: és . Ha kihagyja ezeket a tulajdonságokat a vezérlőből, az alapértelmezett értékek 0. A vezérlő tehát a rácsháló sorába és oszlopába kerül. Próbálja megváltoztatni a vezérlőelem elhelyezését úgy, hogy a attribútumot -re állítja be.
<Label Grid.Column="1">Names</Label>
Figyelje meg, hogy a címke a második oszlopba került. A következő létrehozandó vezérlők elhelyezéséhez használhatja a csatolt tulajdonságokat. Egyelőre azonban állítsa vissza a címkét a 0 oszlopra.
Hozd létre a névlista mezőt
Most, hogy a rács megfelelően lett méretezve, és létrehozta a címkét, adjon hozzá egy listamező vezérlőelemet a címke alatti sorhoz.
Deklarálja a vezérlőt a vezérlő alatt.
Állítsa a tulajdonságot értékre.
Állítsa a tulajdonságot értékre.
Miután elnevezte a vezérlőt, hivatkozhat rá a kód mögötti részben. Rendelje hozzá a nevet a vezérlőhöz az attribútum használatával.
Így kell kinéznie az XAML-nek:
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Label>Names</Label>
<ListBox Grid.Row="1" x:Name="lstNames" />
</Grid>
A fennmaradó vezérlők hozzáadása
Adjon hozzá egy szövegdobozt és egy gombot. A felhasználó ezekkel a vezérlőkkel adja meg a listamezőbe felvenni kívánt nevet. Ahelyett, hogy további sorokat és oszlopokat hoz létre a rácsban a vezérlők elrendezéséhez, helyezze ezeket a vezérlőket az elrendezésvezérlőbe.
A verempanel különbözik a rácstól abban, hogy hogyan helyezi el a vezérlőket. Miközben a és csatolt tulajdonságok segítségével jelezheti a ráccsal, hogy hol helyezze el a vezérlőket, a verempanel automatikusan működik. Az egyes gyermekvezérlőket egymás után helyezi el. Mindegyik vezérlőt egymás után halmozza.
Deklarálja a vezérlőt a vezérlő alatt.
Állítsa a tulajdonságot értékre.
Állítsa a tulajdonságot értékre.
Állítsa be a -t -re.
<Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <Label>Names</Label> <ListBox Grid.Row="1" x:Name="lstNames" /> <StackPanel Grid.Row="1" Grid.Column="1" Margin="5,0,0,0"> </StackPanel>Korábban a rácson használta az attribútumot, de csak egyetlen értéket adott meg: . Ennek a margónak az értéke , ami nagyon különbözik a -től. A margó tulajdonság egy típusú, és mindkét értéket képes értelmezni. A vastagság határozza meg a téglalap alakú keret mindkét oldalán lévő helyet, bal, felső, jobb, alsó. Ha a margó értéke egyetlen érték, akkor mind a négy oldalon ezt az értéket használja.
A vezérlőn belül hozzon létre egy vezérlőt.
- Állítsa a tulajdonságot értékre.
Végül a után , még a belül, hozzon létre egy vezérlőt.
- Állítsa a tulajdonságot értékre.
- Állítsa be a -t -re.
- Állítsa be a tartalmat .
Így kell kinéznie az XAML-nek:
<StackPanel Grid.Row="1" Grid.Column="1" Margin="5,0,0,0">
<TextBox x:Name="txtName" />
<Button x:Name="btnAdd" Margin="0,5,0,0">Add Name</Button>
</StackPanel>
Az ablak elrendezése kész. Az alkalmazásnak azonban nincs olyan logikája, amely ténylegesen működőképes lenne. Ezután össze kell kapcsolnia a vezérlőeseményeket a kódhoz, és le kell kérnie az alkalmazást, hogy ténylegesen tegyen valamit.
Kód hozzáadása a Click eseményhez
A(z) által létrehozott esemény akkor lép fel, amikor a felhasználó megnyomja a gombot. Iratkozzon fel erre az eseményre, és adjon hozzá kódot, hogy nevet adjon a listamezőhöz. Az XAML-attribútumok használatával előfizethet az eseményekre, ugyanúgy, mint a tulajdonságok beállítására.
Keresse meg a vezérlőt.
Állítsa az attribútumot .
<StackPanel Grid.Row="1" Grid.Column="1" Margin="5,0,0,0"> <TextBox x:Name="txtName" /> <Button x:Name="btnAdd" Margin="0,5,0,0" Click="ButtonAddName_Click">Add Name</Button> </StackPanel>Hozza létre az eseménykezelő kódot. Kattintson jobb gombbal a elemre, és válassza az Ugrás a definícióhozlehetőséget.
Ez a művelet létrehoz egy metódust a mögöttes kódban, amely megfelel a megadott kezelőnévnek.
private void ButtonAddName_Click(object sender, RoutedEventArgs e) { }Private Sub ButtonAddName_Click(sender As Object, e As RoutedEventArgs) End SubEzután adja hozzá a következő kódot a következő három lépés végrehajtásához:
- Győződjön meg arról, hogy a szövegmező tartalmaz egy nevet.
- Ellenőrizze, hogy a szövegmezőben megadott név még nem létezik-e.
- Adja hozzá a nevet a listamezőhöz.
private void ButtonAddName_Click(object sender, RoutedEventArgs e) { if (!string.IsNullOrWhiteSpace(txtName.Text) && !lstNames.Items.Contains(txtName.Text)) { lstNames.Items.Add(txtName.Text); txtName.Clear(); } }Private Sub ButtonAddName_Click(sender As Object, e As RoutedEventArgs) If Not String.IsNullOrWhiteSpace(txtName.Text) And Not lstNames.Items.Contains(txtName.Text) Then lstNames.Items.Add(txtName.Text) txtName.Clear() End If End Sub
Az alkalmazás futtatása
Az esemény kezelése után futtassa az alkalmazást. Megjelenik az ablak, és megadhat egy nevet a szövegmezőbe. Adja hozzá a nevet a gomb kiválasztásával.
Kapcsolódó tartalom
Tudjon meg többet a Windows megjelenítési alaprendszerről - XAML-áttekintés
.NET Desktop feedback