Behaviors in WPF – Interaktive Funktionen ohne Code

Behaviors in WPF – Interaktive Funktionen ohne Code

01 Jan 2025 - Matthias Voigt

Mit Behaviors kannst du wiederverwendbare Funktionalitäten in WPF erstellen, ohne zusätzlichen Code in den UI-Elementen unterbringen zu müssen. Ein Beispiel: Eine einfache Border kann durch ein angehängtes Drag-Behavior per Maus gezogen werden.

Behaviors wurden mit Expression Blend 3 eingeführt und ermöglichen es, UI-Interaktionen flexibel zu gestalten, ohne den Quellcode der Anwendung zu verändern. Sie sind besonders hilfreich für Drag & Drop, Eingabevalidierung, Zoomen, Verschieben von Elementen und viele weitere Anwendungsfälle.

Warum Behaviors?

Stell dir eine Anwendung vor, die eine Liste von Kunden anzeigt. Der Nutzer soll einige dieser Kunden einer Abonnentenliste hinzufügen können. Normalerweise würde man dafür einen “Hinzufügen”-Button neben jeder Liste platzieren.

Was aber, wenn der UI-Designer stattdessen Drag & Drop verwenden möchte? Ohne Behaviors müsste das erst mit den Entwicklern abgesprochen und anschließend programmiert werden.

Mit Behaviors geht es schneller: Der Designer zieht einfach ein Drag & Drop Behavior auf die Listen, und die Interaktion ist sofort verfügbar – ohne eine Zeile Code zu schreiben.

Behaviors in Expression Blend 3 nutzen

Behaviors in Expression Blend zu verwenden ist ganz einfach. Im Asset-Bibliothek-Fenster gibt es eine Kategorie namens “Behaviors”.

So funktioniert es:

  1. Ein Behavior aus der Liste auswählen.
  2. Das Behavior auf das gewünschte Element ziehen.
  3. Fertig! Das Behavior ist nun als untergeordnetes Element sichtbar und kann über die Eigenschaften angepasst werden.

Wie funktionieren Behaviors?

Behaviors nutzen attached properties, genauer gesagt Interaction.Behaviors.

Jedes Element kann eine Liste von Behaviors enthalten. Diese Behaviors haben dann Zugriff auf das Element und können auf dessen Events und Eigenschaften reagieren.

Der Trick: Es wird keine neue Infrastruktur benötigt – Behaviors nutzen bestehende Mechanismen von WPF.

Ein einfaches Beispiel für ein Drag-Behavior:

<Border Background="LightBlue">
    <e:Interaction.Behaviors>
        <b:DragBehavior />
    </e:Interaction.Behaviors>
    <TextBlock Text="Zieh mich herum!" />
</Border>

Eigenes Behavior erstellen

Hier ein Beispiel für ein Drag-Behavior, das ein UI-Element mit der Maus beweglich macht:

using System;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using Microsoft.Xaml.Behaviors;

public class DragBehavior : Behavior<UIElement>
{
    private Point elementStartPosition;
    private Point mouseStartPosition;
    private TranslateTransform transform = new TranslateTransform();

    protected override void OnAttached()
    {
        Window parent = Application.Current.MainWindow;
        AssociatedObject.RenderTransform = transform;

        AssociatedObject.MouseLeftButtonDown += (sender, e) => 
        {
            elementStartPosition = AssociatedObject.TranslatePoint(new Point(), parent);
            mouseStartPosition = e.GetPosition(parent);
            AssociatedObject.CaptureMouse();
        };

        AssociatedObject.MouseLeftButtonUp += (sender, e) =>
        {
            AssociatedObject.ReleaseMouseCapture();
        };

        AssociatedObject.MouseMove += (sender, e) =>
        {
            Vector diff = e.GetPosition(parent) - mouseStartPosition;
            if (AssociatedObject.IsMouseCaptured)
            {
                transform.X = diff.X;
                transform.Y = diff.Y;
            }
        };
    }
}

Fazit

Behaviors sind eine leistungsstarke Möglichkeit, um interaktive UI-Funktionen in WPF zu implementieren, ohne den Code der Hauptanwendung zu ändern. Sie machen das UI-Design flexibler und beschleunigen die Entwicklung.