A XAML leíró nyelv

XAML és az alkalmazás logika

Események

A legtöbb WPF alkalmazás két részből áll, a leíró réészből és a mögötte álló kódból. Egy projekten belül, az XAML rész egy .xaml fájlban található, és egy CLR nyelv, mint például a Visual Basic .NET vagy a C# használatos a mögöttes kódhoz. Amikor egy XAML lefordul, az XAML háttér kód fájl minden XAML oldalhoz a névtér alapján kerül hozzárendelésre, ez az x:Class tulajdonságban határozható meg.
XAML kód:

<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="MyNamespace.MyPageCode">
<Button Click="ClickHandler" >Click Me!</Button>
</Page>
Mögöttes C# kód:
namespace MyNamespace
{
public partial class MyPageCode
{
void ClickHandler(object sender, RoutedEventArgs e)
{
Button b = e.Source as Button;
b.Background = Brushes.Red;
}
}
}
Az esemény attribútum után stringként meg kell adni, a mögöttes kódban található esemény kezelő metódus nevét.

x:Name attribútum

Alapértelmezett esetben az objektum elemek feldolgozása közben példányosított objektumok nem kapnak egyedi azonosítót, vagy referenciát amivel később a kódban hívatkozni lehetne rájuk. Amikor a konstruktor meghívódik, olyankor mindig a konstruktort kell egy változó beállítására használni, amivel később hivatkozhatóvá válik az objektum. Az egységes elérés kedvéért az XAML-ben bevezetésre került az x:Name attribútum. Az x:Name attribútum bármilyen objektumon megadható. A mögöttes kódban a megadott x:Name azonosítóval megegyező változóban lesz elérhető a példányosított objektum.

A WPF framework-szintű XAML elemek örökölnek egy Name tulajdonságot. Ami ekvivalens az XAML x:Name attribútumával.
XAML kód:

<StackPanel Name="buttonContainer">


...

<Button Click="RemoveThis">Click to remove this button</Button>
</StackPanel>
Mögöttes C# kód:
void RemoveThis(object sender, RoutedEventArgs e)
{
FrameworkElement fe = e.Source as FrameworkElement;
if (buttonContainer.Children.Contains(fe))
{
buttonContainer.Children.Remove(fe);
}
}