Megosztás a következőn keresztül:


Asztali útmutató (WPF .NET)

Üdvözöljük a Windows Presentation Foundation (WPF) asztali útmutatójában, amely egy felbontásfüggetlen felhasználói felületi keretrendszer, amely vektoralapú renderelési motort használ a modern grafikus hardver előnyeinek kihasználására. A WPF az alkalmazásfejlesztési funkciók átfogó készletét kínálja, amelyek tartalmazzák az bővíthető alkalmazásjelölési nyelvet (XAML), vezérlőket, adatkötést, elrendezést, 2D és 3D ábrákat, animációkat, stílusokat, sablonokat, dokumentumokat, adathordozókat, szöveget és tipográfiát. A WPF a .NET része, így olyan alkalmazásokat hozhat létre, amelyek a .NET API más elemeit is tartalmazzák.

A WPF két implementációval érhető el:

  1. .NET verziója (ez az útmutató):

    A WPF nyílt forráskódú implementálása GitHub, amely .NET-en fut. Az XAML-tervezőnek legalább Visual Studio 2019 16.8-askell. A .NET verziójától függően azonban előfordulhat, hogy a Visual Studio újabb verzióját kell használnia.

    Bár a .NET platformfüggetlen technológia, a WPF csak Windows rendszeren fut.

  2. .NET-keretrendszer 4 verziója:

    A Visual Studio 2019 és a Visual Studio 2017 által támogatott WPF .NET-keretrendszer-implementációja.

    A .NET-keretrendszer 4 a .NET csak Windows rendszerű verziója, és Windows operációsrendszer-összetevőnek számít. A WPF ezen verziója a .NET-keretrendszerrel van elosztva. A WPF .NET-keretrendszer verziójával kapcsolatos további információkért lásd .NET-keretrendszerhez készült WPF bemutatása.

Ez az áttekintés az újonnan érkezők számára készült, és a WPF fő képességeit és fogalmait ismerteti. A WPF-alkalmazások létrehozásának módjáról a oktatóanyagból tájékozódhat: Új WPF-alkalmazás létrehozása.

Miért érdemes frissíteni a .NET-keretrendszerről?

Amikor az alkalmazást .NET-keretrendszerről .NET-re frissíti, a következőkben fog részesülni:

  • Jobb teljesítmény
  • Új .NET API-k
  • A legújabb nyelvi fejlesztések
  • Továbbfejlesztett akadálymentesség és megbízhatóság
  • Frissített eszközkészlet és egyebek

Az alkalmazás frissítéséről az A WPF asztali alkalmazás frissítése .NET 7-recímű témakörben olvashat.

Programozás WPF-fel

A WPF a .NET-típusok részhalmazaként létezik, amelyek többnyire a System.Windows névtérben találhatók. Ha korábban olyan .NET-keretrendszerekkel rendelkező alkalmazásokat készített, mint a ASP.NET és a Windows Forms, az alapvető WPF-programozási élménynek ismerősnek kell lennie:

  • Osztályok példányosítása
  • Tulajdonságok beállítása
  • Hívási módszerek
  • Események kezelése

A WPF több olyan programozási szerkezetet tartalmaz, amely javítja a tulajdonságokat és eseményeket: függőségi tulajdonságokat és irányított eseményeket.

Jelölőnyelv és háttérkód

A WPF lehetővé teszi, hogy jelölőt és kód hátterethasználva dolgozzon ki egy alkalmazást, amely az ASP.NET fejlesztők számára ismerős lehet. Általában XAML jelölőnyelv használatával valósítja meg az alkalmazás megjelenését, míg a viselkedését kezelt programozási nyelvek (kód mögött) segítségével implementálja. A megjelenés és a viselkedés elkülönítése a következő előnyökkel jár:

  • A fejlesztési és karbantartási költségek csökkennek, mert a megjelenésspecifikus korrektúra nem szorosan kapcsolódik a viselkedésspecifikus kódhoz.

  • A fejlesztés hatékonyabb, mert a tervezők az alkalmazás megjelenését egyidejűleg implementálhatják az alkalmazás viselkedését megvalósító fejlesztőkkel.

  • A globalizáció és honosítás WPF-alkalmazások számára egyszerűbbé vált.

Formázás

Az XAML egy XML-alapú korrektúranyelv, amely deklaratív módon implementálja az alkalmazás megjelenését. Általában az ablakokat, párbeszédpaneleket, lapokat és felhasználói vezérlőket definiálja, és vezérlőkkel, alakzatokkal és ábrákkal tölti ki őket.

Az alábbi példa az XAML használatával valósítja meg az egyetlen gombot tartalmazó ablak megjelenését:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    Title="Window with button"
    Width="250" Height="100">

  <!-- Add button to window -->
  <Button Name="button">Click Me!</Button>

</Window>

Ez az XAML egy ablakot és egy gombot határoz meg a Window és Button elemek használatával. Minden elem attribútumokkal van konfigurálva, például az Window elem Title attribútumával az ablak címsorszövegének megadásához. Futásidőben a WPF a korrektúrában definiált elemeket és attribútumokat WPF-osztályok példányaivá alakítja. A Window elem például a Window osztály egy példányává alakul, amelynek Title tulajdonsága a Title attribútum értéke.

Az alábbi ábrán az XAML által az előző példában definiált felhasználói felület (UI) látható:

Gombot tartalmazó ablak

Mivel az XAML XML-alapú, a vele megkomponált felhasználói felület beágyazott elemek hierarchiájában lesz összeállítva, amelyet elemfanéven ismerünk. Az elemfa logikus és intuitív módot kínál az UI-k létrehozására és kezelésére.

Felületi kód

Az alkalmazások fő viselkedése a felhasználói interakciókra reagáló funkciók implementálása. Például kattintson egy menüre vagy gombra, és hívja meg az üzleti logikát és az adathozzáférési logikát válaszként. A WPF-ben ez a viselkedés a korrektúrához társított kódban van implementálva. Ezt a kódtípust kód mögötti kódnak nevezzük. Az alábbi példa az előző példából származó frissített korrektúrát és a mögöttes kódot mutatja be:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.AWindow"
    Title="Window with button"
    Width="250" Height="100">

  <!-- Add button to window -->
  <Button Name="button" Click="button_Click">Click Me!</Button>

</Window>

A frissített jelölés meghatározza a xmlns:x névteret, és társítja a sémával, amely támogatja a kódhoz tartozó típusok használatát. A x:Class attribútum egy kód mögötti osztály társítására szolgál ehhez az adott XAML-korrektúrához. Figyelembe véve, hogy ez az attribútum a <Window> elemen van deklarálva, a mögöttes kódosztálynak örökölnie kell a Window osztálytól.

using System.Windows;

namespace SDKSample
{
    public partial class AWindow : Window
    {
        public AWindow()
        {
            // InitializeComponent call is required to merge the UI
            // that is defined in markup with this class, including  
            // setting properties and registering event handlers
            InitializeComponent();
        }

        void button_Click(object sender, RoutedEventArgs e)
        {
            // Show message box when button is clicked.
            MessageBox.Show("Hello, Windows Presentation Foundation!");
        }
    }
}
Namespace SDKSample

    Partial Public Class AWindow
        Inherits System.Windows.Window

        Public Sub New()

            ' InitializeComponent call is required to merge the UI
            ' that is defined in markup with this class, including  
            ' setting properties and registering event handlers
            InitializeComponent()

        End Sub

        Private Sub button_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)

            ' Show message box when button is clicked.
            MessageBox.Show("Hello, Windows Presentation Foundation!")

        End Sub

    End Class

End Namespace

InitializeComponent a kód mögötti osztály konstruktorából hívódik meg, hogy a jelölésben definiált felhasználói felületet egyesítse a kód mögötti osztállyal. (InitializeComponent az alkalmazás létrehozásakor jön létre, ezért nem kell manuálisan implementálnia.) A x:Class és a InitializeComponent kombinációja biztosítja, hogy a megvalósítás megfelelően inicializálva legyen, amikor létrejön.

Figyelje meg, hogy a korrektúra <Button> eleme meghatározta a Click attribútum button_Click értékét. A jelölőnyelv és a kód-felépítés inicializálásával és közös használatával a gomb Click eseménye automatikusan a button_Click metódushoz lesz hozzárendelve. Amikor a gombra kattint, a rendszer meghívja az eseménykezelőt, és megjelenik egy üzenetmező a System.Windows.MessageBox.Show metódus meghívásával.

Az alábbi ábrán a gomb kattintásának eredménye látható:

üzenetdoboz

Bemenet és parancsok

A vezérlők leggyakrabban észlelik és válaszolnak a felhasználói bemenetekre. A WPF bemeneti rendszere a közvetlen és az irányított eseményeket is használja a szövegbevitel, a fókuszkezelés és az egér pozicionálásának támogatására.

Az alkalmazások gyakran összetett bemeneti követelményekkel rendelkeznek. A WPF egy olyan parancsrendszert biztosít, amely elválasztja a felhasználó által bevitt műveleteket a műveletekre reagáló kódtól. A parancsrendszer lehetővé teszi, hogy több forrás is meghívja ugyanazt a parancslogikát. Vegyük például a különböző alkalmazások által használt gyakori szerkesztési műveleteket: Másolás, Kivágásés Beillesztés. Ezek a műveletek különböző felhasználói műveletekkel hívhatók meg, ha parancsokkal implementálják őket.

Vezérlőberendezés

Az alkalmazásmodell által nyújtott felhasználói élmények összeállított vezérlőkben testesülnek meg. A WPF-ben a vezérlési olyan gyűjtőkifejezés, amely a WPF-osztályok olyan kategóriájára vonatkozik, amely a következő jellemzőkkel rendelkezik:

  • Ablakban vagy lapon elhelyezve.
  • Rendelkezik felhasználói felülettel.
  • Valamilyen viselkedés implementálása.

További információ: Vezérlők.

WPF-vezérlők funkció szerint

A beépített WPF-vezérlők a következők:

Elrendezés

Felhasználói felület létrehozásakor a vezérlőket hely és méret szerint rendezi el, hogy elrendezést alakíthasson ki. Minden elrendezés alapvető követelménye, hogy alkalmazkodjon az ablakméret és a megjelenítési beállítások változásaihoz. Ahelyett, hogy a kód írására kényszeríti, hogy ilyen körülmények között adaptáljon egy elrendezést, a WPF egy első osztályú, bővíthető elrendezési rendszert biztosít Önnek.

Az elrendezési rendszer sarokköve a relatív helymeghatározás, amely növeli a változó ablak- és megjelenítési feltételekhez való alkalmazkodás képességét. Az elrendezési rendszer a vezérlők közötti egyeztetést is kezeli az elrendezés meghatározásához. A tárgyalás kétlépéses folyamat: először egy vezérlő közli a szülővel, hogy milyen helyet és méretet igényel. Másodszor, a szülő megadja a vezérlőelemnek, hogy milyen területtel rendelkezhet.

Az elrendezési rendszer a gyermekvezérlők számára az alapszintű WPF osztályokon keresztül érhető el. Az olyan gyakori elrendezések esetében, mint a rácsok, a halmozások és a dokkolás, a WPF számos elrendezésvezérlőt tartalmaz:

  • Canvas: A gyermekvezérlők saját elrendezéssel rendelkeznek.

  • DockPanel: A gyermekvezérlők a panel széleihez vannak igazítva.

  • Grid: A gyermekvezérlőket sorok és oszlopok helyezik el.

  • StackPanel: A gyermekvezérlők függőlegesen vagy vízszintesen halmozódnak.

  • VirtualizingStackPanel: A gyermekvezérlők virtualizálása és elrendezése egy vízszintes vagy függőleges vonalon történik.

  • WrapPanel: A gyermekvezérlők balról jobbra sorrendben vannak elhelyezve, és a következő sorba vannak csomagolva, ha nincs elég hely az aktuális vonalon.

Az alábbi példa egy DockPanel-t több TextBox vezérlőelem elrendezésére használja.

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.LayoutWindow"
    Title="Layout with the DockPanel" Height="143" Width="319">
  
  <!--DockPanel to layout four text boxes--> 
  <DockPanel>
    <TextBox DockPanel.Dock="Top">Dock = "Top"</TextBox>
    <TextBox DockPanel.Dock="Bottom">Dock = "Bottom"</TextBox>
    <TextBox DockPanel.Dock="Left">Dock = "Left"</TextBox>
    <TextBox Background="White">This TextBox "fills" the remaining space.</TextBox>
  </DockPanel>

</Window>

A DockPanel lehetővé teszi, hogy a gyermek TextBox vezérlők elmondják, hogyan rendezze el őket. Ehhez a DockPanel egy Dock csatolt tulajdonságot implementál, amely a gyermekvezérlők számára van elérhetővé téve, hogy mindegyik meg tudja adni a dokkolás stílusát.

Jegyzet

A gyermekvezérlők által használt szülővezérlő által implementált tulajdonság egy csatolt tulajdonságnevű WPF-szerkezet.

Az alábbi ábrán az előző példában szereplő XAML-korrektúra eredménye látható:

DockPanel-oldal

Adatkötés

A legtöbb alkalmazás úgy jön létre, hogy a felhasználók számára lehetővé teszik az adatok megtekintését és szerkesztését. A WPF-alkalmazások esetében az adatok tárolásának és elérésének munkáját már számos különböző .NET-adatelérési kódtár, például az SQL és az Entity Framework Core biztosítja. Az adatok elérése és az alkalmazás felügyelt objektumaiba való betöltése után megkezdődik a WPF-alkalmazások kemény munkája. Ez alapvetően két dologból áll:

  1. Az adatok másolása a felügyelt objektumokból vezérlőkbe, ahol az adatok megjeleníthetők és szerkeszthetők.

  2. Annak biztosítása, hogy az adatok vezérlőkkel végzett módosításai vissza legyenek másolva a felügyelt objektumokba.

Az alkalmazásfejlesztés egyszerűsítése érdekében a WPF hatékony adatkötési motort biztosít a lépések automatikus kezeléséhez. Az adatkötési motor alapegysége az Binding osztály, amelynek feladata egy vezérlő (a kötési cél) kötése egy adatobjektumhoz (a kötési forráshoz). Ezt a kapcsolatot az alábbi ábra szemlélteti:

Alapszintű adatkötési diagram

A WPF támogatja a kötések deklarálását közvetlenül az XAML jelölőnyelvben. Az alábbi XAML-kód például a TextBoxText tulajdonságát egy objektum Name tulajdonságához köti a "{Binding ... }" XAML szintaxis használatával. Ez feltételezi, hogy a Window számára egy olyan adatobjektum van beállítva, amelynek a DataContext tulajdonsága és a Name tulajdonsága is meghatározott.

 <Window
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     x:Class="SDKSample.DataBindingWindow">

   <!-- Bind the TextBox to the data source (TextBox.Text to Person.Name) -->
   <TextBox Name="personNameTextBox" Text="{Binding Path=Name}" />

 </Window>

A WPF adatkötési motor nem csupán kötést biztosít, hanem érvényesítést, rendezést, szűrést és csoportosítást is biztosít. Emellett az adatkötés támogatja az adatsablonok használatát a kötött adatok egyéni felhasználói felületének létrehozásához.

További információ: Adatkötés áttekintése.

Grafika & animáció

A WPF széles körű és rugalmas grafikus funkciókat biztosít, amelyek a következő előnyökkel járnak:

  • Felbontásfüggetlen és eszközfüggetlen grafika. A WPF grafikus rendszer alapvető mértékegysége az eszközfüggetlen képpont, amely 1/96 hüvelyk, és biztosítja a felbontásfüggetlen és eszközfüggetlen renderelés alapjait. Minden eszközfüggetlen képpont automatikusan skálázódik, hogy megfeleljen a megjelenített rendszer pont/hüvelyk (dpi) beállításának.

  • Továbbfejlesztett pontosság. A WPF koordinátarendszer mérése kettős pontosságú lebegőpontos számokkal történik az egypontos pontosság helyett. Az átalakítások és az átlátszatlansági értékek is kettős pontosságúként vannak kifejezve. A WPF támogatja a széles színtartományt (scRGB), és integrált támogatást nyújt a különböző színterek bemeneteinek kezeléséhez.

  • Speciális grafikus és animációs támogatás. A WPF leegyszerűsíti a grafikus programozást az animációs jelenetek kezelésével; Nem kell aggódnia a jelenetfeldolgozás, a renderelési hurkok és a kétvonalas interpoláció miatt. Emellett a WPF találattesztelési támogatást és teljes alfakompozitálási támogatást is biztosít.

  • Hardveres gyorsítás. A WPF grafikus rendszer a grafikus hardver előnyeit kihasználva minimalizálja a processzorhasználatot.

Kétdimenziós ábrák

A WPF egy könyvtárat biztosít a közös kétdimenziós, vektorokkal rajzolt alakzatokhoz, mint például a téglalapok és az ellipszisek. Az alakzatok nem csak megjelenítésre valók; az alakzatok a vezérlőktől elvárt számos funkciót implementálnak, beleértve a billentyűzet- és egérbemenetet is.

A WPF által biztosított 2D alakzatok az alapalakzatok standard készletét fedik le. Előfordulhat azonban, hogy egyéni alakzatokat kell létrehoznia a testreszabott felhasználói felület kialakításához. A WPF geometriákat biztosít olyan egyéni alakzatok létrehozásához, amelyek közvetlenül rajzolhatók, ecsetként használhatók, vagy más alakzatok és vezérlők kivágására használhatók.

További információ: Geometria áttekintése.

A WPF 2D képességek egy részhalmaza vizuális effektusokat tartalmaz, például színátmeneteket, bitképeket, rajzokat, videókkal való festést, forgatást, skálázást és húzást. Ezek a hatások mind kefékkel érhetők el. Az alábbi ábrán néhány példa látható:

különböző kefék illusztrációja

További információért lásd: WPF ecsetek áttekintése.

3D renderelés

A WPF 3D renderelési képességeket is tartalmaz, amelyek integrálhatók a 2D-s ábrákkal, így izgalmasabb és érdekesebb felhasználói felületek is létrehozhatók. Az alábbi ábrán például a 3D alakzatokra renderelt 2D képek láthatók:

Visual3D-mintaképernyő képernyőképe

További információ: 3D-s ábrák áttekintése.

Animáció

A WPF animációs támogatás lehetővé teszi, hogy a vezérlők növekedjenek, rázkódjanak, forogjanak és halványuljanak, ezáltal érdekes lapáttűnések hozhatók létre. A legtöbb WPF-osztályt animálhatja, akár egyéni osztályokat is. Az alábbi ábrán egy egyszerű animáció látható működés közben:

Animált kockák képei

További információ: Animáció áttekintése.

Szöveg és tipográfia

A kiváló minőségű szövegmegjelenítés érdekében a WPF a következő funkciókat kínálja:

  • OpenType betűtípus támogatása.
  • ClearType-fejlesztések.
  • Nagy teljesítmény, amely kihasználja a hardveres gyorsítás előnyeit.
  • Szöveg integrálása adathordozóval, ábrákkal és animációval.
  • Nemzetközi betűtípus-támogatási és tartalék mechanizmusok.

A képekkel való szövegintegráció szemléltetéseként az alábbi ábra a szövegdekorációk alkalmazását mutatja be:

Szöveg különböző szövegdekorációkkal

További információért lásd: Tipográfia a Windows Presentation Foundation.

WPF-alkalmazások testreszabása

Eddig a pontig az alkalmazások fejlesztéséhez szükséges alapvető WPF-építőelemeket láthatta:

  • Az alkalmazásmodell használatával tárolhatja és szolgáltathatja az alkalmazástartalmat, amely főként vezérlőkből áll.
  • A kezelőfelület vezérlőinek elrendezésének egyszerűsítése érdekében a WPF-elrendezési rendszert kell használnia.
  • Adatkötéssel csökkentheti a felhasználói felület adatokkal való integrálásának munkáját.
  • Az alkalmazás vizuális megjelenésének javítása érdekében a WPF által biztosított átfogó grafikus, animációs és médiatámogatást használja.

Az alapok azonban gyakran nem elegendőek egy igazán különálló és vizuálisan lenyűgöző felhasználói élmény létrehozásához és kezeléséhez. Előfordulhat, hogy a szabványos WPF-vezérlők nem integrálódnak az alkalmazás kívánt megjelenésével. Előfordulhat, hogy az adatok nem a leghatékonyabb módon jelennek meg. Előfordulhat, hogy az alkalmazás általános felhasználói felülete nem felel meg a Windows-témák alapértelmezett megjelenésének és hangulatának.

Ezért a WPF különböző mechanizmusokat biztosít az egyedi felhasználói élmények létrehozásához.

Tartalommodell

A WPF-vezérlők többségének fő célja a tartalom megjelenítése. A WPF-ben a vezérlő tartalmát alkotó elemek típusát és számát a vezérlő tartalommodelljéneknevezzük. Egyes vezérlők egyetlen elemet és tartalomtípust tartalmazhatnak. Egy TextBox tartalma például egy sztringérték, amely a Text tulajdonsághoz van rendelve.

Más vezérlők azonban több különböző típusú tartalmat tartalmazhatnak; a Content tulajdonság által megadott Buttontartalma különböző elemeket tartalmazhat, például elrendezésvezérlőket, szöveget, képeket és alakzatokat.

A különböző vezérlők által támogatott tartalomtípusokról további információt WPF-tartalommodellcímű témakörben talál.

Eseményindítók

Bár az XAML-korrektúra fő célja egy alkalmazás megjelenésének megvalósítása, az XAML használatával implementálhatja az alkalmazás viselkedésének néhány aspektusát is. Ilyen például az eseményindítók használata az alkalmazások megjelenésének a felhasználói interakciók alapján történő módosításához. További információ: Stílusok és sablonok.

Sablonok

A WPF-vezérlők alapértelmezett felhasználói felületei általában más vezérlőkből és alakzatokból épülnek fel. Egy Button például ButtonChrome és ContentPresenter vezérlőkből áll. A ButtonChrome a gomb szokásos megjelenését biztosítja, míg a ContentPresenter a gomb tartalmát jeleníti meg a Content tulajdonságban megadott módon.

Előfordulhat, hogy egy vezérlő alapértelmezett megjelenése ütközik az alkalmazás általános megjelenésével. Ebben az esetben egy ControlTemplate használatával módosíthatja a vezérlő felhasználói felületének megjelenését anélkül, hogy módosítaná annak tartalmát és viselkedését.

Például, amikor rákattintanak egy Button-ra, az létrehozza a Click eseményt. Ha módosítja egy gomb sablonját egy Ellipse alakzat megjelenítésére, a vezérlő aspektusának vizualizációja megváltozott, de a funkció nem. Továbbra is rákattinthat a vezérlő vizuális aspektusára, és a Click esemény a várt módon lesz előállítva.

Egy háromliptikus gomb és egy második ablak

Adatsablonok

Míg a vezérlősablonok segítségével megadhatja a vezérlők megjelenését, az adatsablonok lehetővé teszi a vezérlő tartalmának megjelenését. Az adatsablonokat gyakran használják a kötött adatok megjelenítésének javítására. Az alábbi ábra egy ListBox alapértelmezett megjelenését mutatja, amely Task objektumok gyűjteményéhez van kötve, ahol minden tevékenységnek van neve, leírása és prioritása:

Egy listamező alapértelmezett megjelenéssel

Az alapértelmezett megjelenés olyan, amilyet egy ListBox-tól várnánk. Az egyes tevékenységek alapértelmezett megjelenése azonban csak a tevékenység nevét tartalmazza. A tevékenység nevének, leírásának és prioritásának megjelenítéséhez a ListBox vezérlőelem kötött listaelemeinek alapértelmezett megjelenését módosítani kell egy DataTemplatehasználatával. Íme egy példa a Task objektumhoz létrehozott adatsablon alkalmazására.

Adatsablont használó listamező

A ListBox megtartja a viselkedését és általános megjelenését, és csak a listamező által megjelenített tartalom megjelenése módosult.

További információkért lásd: Adatsablonok áttekintése.

Stílusok

A stílusok lehetővé teszik, hogy a fejlesztők és a tervezők szabványosítsanak egy adott megjelenést a termékükhöz. A WPF erős stílusmodellt biztosít, amelynek alapja a Style elem. A stílusok tulajdonságértékeket alkalmazhatnak a típusokra. Hivatkozáskor automatikusan alkalmazhatók mindenre, a típus vagy az egyes objektumok szerint. Az alábbi példa létrehoz egy stílust, amely az ablakon minden Button háttérszínét Orange-re állítja.

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.StyleWindow"
    Title="Styles">

    <Window.Resources>
        <!-- Style that will be applied to all buttons for this window -->
        <Style TargetType="{x:Type Button}">
            <Setter Property="Background" Value="Orange" />
            <Setter Property="BorderBrush" Value="Crimson" />
            <Setter Property="FontSize" Value="20" />
            <Setter Property="FontWeight" Value="Bold" />
            <Setter Property="Margin" Value="5" />
        </Style>
    </Window.Resources>
    <StackPanel>

        <!-- This button will have the style applied to it -->
        <Button>Click Me!</Button>

        <!-- This label will not have the style applied to it -->
        <Label>Don't Click Me!</Label>

        <!-- This button will have the style applied to it -->
        <Button>Click Me!</Button>
        
    </StackPanel>
</Window>

Mivel ez a stílus az összes Button vezérlőt célozza, a stílus automatikusan az ablak összes gombjára lesz alkalmazva, ahogyan az alábbi ábrán látható:

Két narancssárga gomb

További információ: Stílusok és sablonok.

Erőforrások

Az alkalmazások vezérlőinek ugyanazzal a megjelenéssel kell rendelkezniük, amely a betűtípusoktól és a háttérszínektől kezdve a sablonokon, adatsablonokon és stílusokon át bármit tartalmazhat. A WPF felhasználói felületi erőforrásainak támogatásával ezeket az erőforrásokat egyetlen helyen ágyazhatja be újra.

Az alábbi példa egy közös háttérszínt határoz meg, amelyet egy Button és egy Labeloszt meg:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.ResourcesWindow"
    Title="Resources Window">

  <!-- Define window-scoped background color resource -->
  <Window.Resources>
    <SolidColorBrush x:Key="defaultBackground" Color="Red" />
  </Window.Resources>

  <!-- Button background is defined by window-scoped resource -->
  <Button Background="{StaticResource defaultBackground}">One Button</Button>

  <!-- Label background is defined by window-scoped resource -->
  <Label Background="{StaticResource defaultBackground}">One Label</Label>
</Window>

További információ: WPF-erőforrás definiálása és hivatkozása.

Egyéni vezérlők

Bár a WPF számos testreszabási támogatást nyújt, előfordulhat, hogy a meglévő WPF-vezérlők nem felelnek meg sem az alkalmazás, sem a felhasználók igényeinek. Ez akkor fordulhat elő, ha:

  • A szükséges felhasználói felület nem hozható létre a meglévő WPF-implementációk megjelenésének testreszabásával.
  • A szükséges viselkedést a meglévő WPF-implementációk nem támogatják (vagy nem könnyen támogatják).

Ezen a ponton azonban kihasználhatja a három WPF-modell egyikét egy új vezérlő létrehozásához. Minden modell egy adott forgatókönyvet céloz meg, és az egyéni vezérlőnek egy adott WPF alaposztályból kell származnia. A három modell itt található:

  • Felhasználói vezérlőmodell
    Az egyéni vezérlők UserControl származnak, és egy vagy több más vezérlőből állnak.

  • Vezérlőmodell Az egyéni vezérlők Control származnak, és olyan implementációk készítésére szolgálnak, amelyek a legtöbb WPF-vezérlőhöz hasonlóan sablonokkal választják el a viselkedésüket a megjelenésüktől. A Control származtatása nagyobb szabadságot biztosít az egyéni felhasználói felület létrehozásához, mint a felhasználói vezérlőknél, de ez nagyobb erőfeszítést igényelhet.

  • Keretrendszer-elemmodell.
    Az egyéni vezérlők a FrameworkElement osztályból származnak, ha a megjelenésük egyéni renderelési logikával van meghatározva (nem sablonokkal).

Az egyéni vezérlőkkel kapcsolatos további információkért lásd: Vezérlők készítése áttekintése.

Lásd még: