Startseite  Inhaltsverzeichnis  <<  >>  

Kapitel 3 - Ereignisbehandlung

Wenn Sie nicht mit XAML arbeiten möchten, gestaltet sich die Ereignisbehandlung wie schon unter .NET.

3.1 Ereignisbehandlung in C#

Die Ereignisbehandlung in Verbindung mit einer XAML-Datei kann auf mindestens 2 Arten erfolgen. In jedem Fall müssen Sie für das Kontrollelement ein Ereinis definieren. Bei einer Schaltfläche kann dies z.B. das Ereignis Click sein. Als Wert des gleichnamigen Attributs wird der Name der zugehörigen Methode angegeben. Möchten Sie später auf das Kontrollelement zugreifen, sollten Sie über das Attribut ID einen Namen für das Steuerelement vergeben. Grundsätzlich existieren für die Kontrollelemente die gleichen Ereignisse wie unter dem .NET-Framework. Es sind allerdings momentan nur einige in Avalon implementiert.

Beispiel: Beispiel1.zip Für den Button wird eine Ereignisroutine ButtonClick() definiert. Damit in dieser Routine, die in der zugehörigen *.cs-Datei implementiert wird auf die TextBox zugegriffen werden kann, erhält diese über das Attribut ID den Namen tbMain. Window1.xaml
<Window x:Class="Beispiel1.Window1" xmlns="http://schemas.microsoft.com/2003/xaml"
        xmlns:x="Definition" Text="Beispiel1" Width="300" Height="200" Top="200" Left="200">
  <Grid>
    <Button Grid.Top="10" Grid.Left="73" Height="30" Width="100" Click="ButtonClick">
      <Text>Klick mich...
    </Button>
    <TextBox ID="tbMain" Grid.Top="50" Grid.Left="73" Height="30" Width="100">
      Standardtext
    </TextBox>
  </Grid>
</Window>
In der *.cs-Datei wird die Methode ButtonClick() implementiert. Der erste Parameter verweist auf das auslösende Objekt, also den Button. Der zweite Parameter ist vom Typ RoutedEventArgs. Mehr dazu später. Der Bezug auf die TextBox erfolgt über den Namen, der über das Attribut ID zuvor definiert wurde. Window1.xaml.cs
private void ButtonClick(object o, RoutedEventArgs args)
{
  MessageBox.Show("Button wurde geklickt.");
  tbMain.Text = "Button geklickt";
  tbMain.Focus();
}
Andere Ereignisse andere Parameter RoutedEventArgs

3.2 Ereignisbehandlung in XAML

Der Code für die Ereignisbehandlung kann auch direkt in XAML eingebettet werden. Dazu wird ein eigener Code-Abschnitt definiert und der Code wird in einem CData-Block eingebettet.
<Grid>
  <Button Grid.Top="90" Grid.Left="73" Height="30" Width="100" Click="ButtonClick2">
    <Text>XAML - Ereignis</Text>
  </Button>
  <x:Code>
    <![CDATA[
      void ButtonClick2(object sender, RoutedEventArgs args)
      {
        tbMain.Text = "Button 2 geklickt";
      }
      ]]>
  </x:Code>
</Grid>

3.3 Event-Routing

Beispiel: Beispiel1.zip Avalon verwendet zur Benachrichtigung der Elemente beim Auftreten eines Ereignisses das Event Routing. Dabei wird festgelegt, wie und ob Elternelemente von Ereignissen ihrer Kinder informiert werden. Die direkte Verarbeitungsform informiert nur das Kontrollelement, bei dem das Ereignis eingetreten ist, wie z.B. unter Windows Forms oder im bisher gezeigten Beispiel. Beim Bubbling werden nicht mehreren Kontrollelementen Handler zugeordnet, sondern das übergeordnete Element verarbeitet für alle untergeordeten Elemente die Ereignisse. Beispiel: Beispiel2.zip
<Grid Button.Click="HandleButtonClick">
  <Button ID="Button1" Grid.Top="10" Grid.Left="73" Height="30" Width="100">
    <Text>Klick mich...1</Text>
  </Button>
  <Button ID="Button2" Grid.Top="50" Grid.Left="73" Height="30" Width="100">
    <Text>Klick mich...2</Text>
  </Button>
</Grid>