askill
make-wpf-behavior

make-wpf-behaviorSafety 90Repository

Generates WPF Behavior<T> classes using Microsoft.Xaml.Behaviors.Wpf. Usage: /wpf-dev-pack:make-wpf-behavior <BehaviorName> <TargetType>

9 stars
1.2k downloads
Updated 1/28/2026

Package Files

Loading files...
SKILL.md

WPF Behavior Generator

Generates Behavior classes based on Microsoft.Xaml.Behaviors.Wpf.

Usage

# Behavior for TextBox
/wpf-dev-pack:make-wpf-behavior SelectAllOnFocus TextBox

# General behavior for UIElement
/wpf-dev-pack:make-wpf-behavior DragDrop UIElement

# Behavior for Window
/wpf-dev-pack:make-wpf-behavior AutoClose Window

Generated Code

namespace {Namespace}.Behaviors;

/// <summary>
/// {Description}
/// </summary>
public sealed class {Name}Behavior : Behavior<{TargetType}>
{
    #region Dependency Properties

    public static readonly DependencyProperty IsEnabledProperty =
        DependencyProperty.Register(
            nameof(IsEnabled),
            typeof(bool),
            typeof({Name}Behavior),
            new PropertyMetadata(true));

    /// <summary>
    /// Gets or sets whether the behavior is enabled.
    /// </summary>
    public bool IsEnabled
    {
        get => (bool)GetValue(IsEnabledProperty);
        set => SetValue(IsEnabledProperty, value);
    }

    #endregion

    #region Lifecycle

    protected override void OnAttached()
    {
        base.OnAttached();

        // Subscribe to events
        AssociatedObject.Loaded += OnLoaded;
        // TODO: Add more event subscriptions as needed
    }

    protected override void OnDetaching()
    {
        base.OnDetaching();

        // IMPORTANT: Always unsubscribe to prevent memory leaks
        AssociatedObject.Loaded -= OnLoaded;
        // TODO: Remove all event subscriptions
    }

    #endregion

    #region Event Handlers

    private void OnLoaded(object sender, RoutedEventArgs e)
    {
        if (!IsEnabled)
        {
            return;
        }

        // TODO: Implement behavior logic
    }

    #endregion
}

XAML Usage

<Window xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
        xmlns:behaviors="clr-namespace:MyApp.Behaviors">

    <TextBox>
        <b:Interaction.Behaviors>
            <behaviors:{Name}Behavior IsEnabled="{Binding IsBehaviorEnabled}"/>
        </b:Interaction.Behaviors>
    </TextBox>

</Window>

Common Behavior Patterns

Focus Management

public sealed class FocusOnLoadBehavior : Behavior<UIElement>
{
    protected override void OnAttached()
    {
        base.OnAttached();
        AssociatedObject.Loaded += (s, e) => AssociatedObject.Focus();
    }
}

Input Handling

public sealed class EnterKeyBehavior : Behavior<TextBox>
{
    public static readonly DependencyProperty CommandProperty =
        DependencyProperty.Register(nameof(Command), typeof(ICommand),
            typeof(EnterKeyBehavior));

    public ICommand? Command
    {
        get => (ICommand?)GetValue(CommandProperty);
        set => SetValue(CommandProperty, value);
    }

    protected override void OnAttached()
    {
        base.OnAttached();
        AssociatedObject.KeyDown += OnKeyDown;
    }

    protected override void OnDetaching()
    {
        base.OnDetaching();
        AssociatedObject.KeyDown -= OnKeyDown;
    }

    private void OnKeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Enter)
        {
            Command?.Execute(AssociatedObject.Text);
        }
    }
}

Required Package

<PackageReference Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.1.*" />

File Location

{Project}/
└── Behaviors/
    └── {Name}Behavior.cs

Best Practices

DODON'T
✅ Unsubscribe events in OnDetaching❌ Missing event unsubscription (memory leak)
✅ Expose settings via DependencyProperty❌ Use hardcoded values
✅ Apply IsEnabled pattern❌ Always execute without condition
✅ Check AssociatedObject for null❌ Use without null check

Install

Download ZIP
Requires askill CLI v1.0+

AI Quality Score

83/100Analyzed 2/19/2026

High-quality technical skill for generating WPF Behavior<T> classes. Well-structured with clear usage examples, complete code templates, XAML usage patterns, common behavior patterns (Focus Management, Input Handling), and best practices table. Includes safety guidance on memory leaks and event unsubscription. Minor gap is lack of explicit 'when to use' section. Good candidate for external reuse."

90
85
80
80
85

Metadata

Licenseunknown
Version-
Updated1/28/2026
Publisherchristian289

Tags

api