Startseite Inhaltsverzeichnis << >>
Kapitel 11 - Custom Controls
11.1 Grundlagen
In Avalon ist es selbstverständlich, dass Sie auch eigene
Komponenten bzw. UI-Elemente erzeugen und natürlich auch verwenden
können. Diese Elemente können Sie wie unter Windows Forms
erzeugen, oder Sie verwenden eine Mischung aus XAML und C#-Code. Als
Ausgabetyp verwenden Sie eine Klassenbibliothek. Wenn Sie mit dem
Visual Studio einen neuen Projekttyp Avalon Control Library erzeugen,
wird nur eine C#-Datei erzeugt. Die XAML-Datei ist manuell, z.B.
über eine umbenannte XML-Datei, hinzuzufügen (wie gesagt geht
es auch ohne XAML). Die C#-Datei enthält dazu eine KLasse, die von
Control abgeleitet ist. Dadurch können Sie das neue Element
positionieren etc. Die Klasse muss als partial deklariert werden, damit
auch die korrespondierende XAML-Datei verwendet wird. Jetzt können
Sie darin Eigenschaften definieren oder Code unterbringen.
RedCarpet.xaml.cs
namespace MyAvControl
{
public partial class RedCarpet : Canvas
{
private Brush bg = Brushes.White;
public Brush BackgroundX
{
get
{
return bg;
}
set
{
bg = value;
this.Background = value;
}
}
}
}
In der XAML-Datei wird der Code in ein Canvas-Element eingeschlossen,
um eine einfache Positionierung vornehmen zu können. Weiterhin ist
ein Verweis auf die partielle C#-Klasse über
def:Class="MyAvControl.RedCarpet" notwendig. Als Inhalt wird ein rotes
Rechteck mit blauem Rahmen und ein Button verwendet. Es können
also auf diese Weise auch verbundene UI-Elemente erzeugt werden (z.B.
ein kleiner Taschenrechner).
RedCarpet.xaml
<Canvas xmlns="http://schemas.microsoft.com/2003/xaml"
def:Class="MyAvControl.RedCarpet"
xmlns:def="Definition">
<Rectangle Fill="LightBlue" Width="100" Height="100" Stroke="Red" />
<Button>Hallo</Button>
</Canvas>
11.2 Einbinden des UI-Elements
Damit das UI-Element in XAML verwendet werden kann, muss zuerst die
Assembly eingebunden werden. Dies erfolgt über die PI
<?Mapping?>. Als XmlNamespace wird ein beliebiger Name verwendet.
Der ClrNamespace muss mit dem Namespace des einzubindenden
Kontrollelements korrespondieren. Der Name der Assembly wird über
das Attribut Assembly angegeben, normalerweise ohne die Endung .dll.
Dann definieren Sie ein Kürzel für Ihren neuen Namespace
(hier mcc) und können dann über das Kürzel auf den
Klassennamen des Kontrollelements zugreifen.
<?Mapping XmlNamespace="MyAvControl" ClrNamespace="MyAvControl"
Assembly="MyAvControl"?>
<Window def:Class="AvalonApplication1.Window1"
xmlns="http://schemas.microsoft.com/2003/xaml"
xmlns:def="Definition"
Text="My Avalon Control - Test"
xmlns:mcc="MyAvControl">
<Grid>
<mcc:RedCarpet Width="200" Height="150" Background="Green" />
</Grid>
</Window>
Source: Kap11.zip