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.
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 zu verwenden ist ganz einfach. Im Asset-Bibliothek-Fenster gibt es eine Kategorie namens “Behaviors”.
So funktioniert es:
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>
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;
}
};
}
}
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.