A Windows Presentation Foundation áttekintése

Ü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, amely a modern grafikus hardver előnyeit használja. 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 rendelkezik:

  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álása.

    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.

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ő előnyöket élvezheti:

  • 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éhez tekintse meg a WPF asztali alkalmazások .NET-re való frissítését ismertető témakört.

Programozás WPF-fel

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

  • 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 egy beágyazott elemekből álló hierarchiába van összeállítva, amelyet elemfának nevezü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 válaszként meghívja az üzleti logikát és az adathozzáférési logikát. 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 tulajdonság egy kód mögötti osztályt társít ehhez az adott XAML-jelöléshez. 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ívjuk meg, hogy egyesítse a korrektúrában definiált felhasználói felületet a kód mögötti osztálysal. (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 button_Click attribútum 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 a metódus meghívásával megjelenít egy üzenetmezőt System.Windows.MessageBox.Show .

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ők

Az alkalmazásmodell a felhasználói élményeket konstruált vezérlőkkel biztosítja. 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 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.

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 az alapSZINTŰ WPF-osztályokon keresztül teszi elérhetővé magát a gyermekvezérlők számára. 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.

Megjegyzés:

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 biztosítja a felhasználók számára az adatok megtekintését és szerkesztését. A WPF-alkalmazások esetében számos különböző .NET-adatelérési kódtár, például az SQL és az Entity Framework Core már biztosítja az adatok tárolását és elérését. 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 a felhasználók megjeleníthetik és szerkeszthetik az adatokat.

  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 TextTextBox tulajdonságát egy objektum Name tulajdonságához köti a "{Binding ... }" XAML szintaxis használatával. Ez feltételezi, hogy a DataContext számára egy olyan adatobjektum van beállítva, amelynek a Window 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; Érvényesítést, rendezést, szűrést és csoportosítást 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. Az ecsetek mindezeket a hatásokat érik 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ó támogatása lehetővé teszi, hogy a vezérlők növekedjenek, rázzanak, pörögjenek és elhalványuljanak, így érdekes oldalátmeneteket hozhat 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. A TextBox tartalma például egy olyan 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 Button tulajdonság által megadott Contenttartalma 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 a WPF tartalommodellben talál.

Kiváltó okok

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

Más vezérlők és alakzatok általában a WPF-vezérlők alapértelmezett felhasználói felületeit készítik el. 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 a ControlTemplate vezérlő felhasználói felületének megjelenését a tartalom és a viselkedés módosítása nélkül módosíthatja.

Például, amikor rákattintanak egy Button-ra, az létrehozza a Click eseményt. Ha egy gomb sablonját egy alakzat megjelenítésére Ellipse módosítja, a vezérlő vizuális aspektusa megváltozik, 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 ábrán látható az alapértelmezett megjelenés ListBox számára, amely egy Task objektumgyűjteményhez 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 elvárnál egy ListBox. Az egyes tevékenységek alapértelmezett megjelenése azonban csak a tevékenység nevét tartalmazza. A feladat neve, leírása és prioritása megjelenítése érdekében módosítsa a ListBox vezérlőelemhez kötött listaelemek alapértelmezett megjelenését a DataTemplate használatával. Íme egy példa az objektumhoz létrehozott adatsablon alkalmazására Task .

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