# Extenders

Wisej.NET extenders are components that add and manage properties for other components.

{% hint style="info" %}
Since properties cannot be added to existing classes or objects, extender properties appear only in the designer. At runtime, they function as Set/Get methods on the extender.
{% endhint %}

Extenders must implement the [IExtenderProvider](https://docs.microsoft.com/en-us/dotnet/api/system.componentmodel.iextenderprovider) interface, determining which components can be extended through the [CanExtend(component)](https://docs.microsoft.com/en-us/dotnet/api/system.componentmodel.iextenderprovider.canextend) implementation.

Some extenders integrate into existing components. For example, [TableLayoutPanel](https://docs.wisej.com/docs/controls/containers/tablelayoutpanel), [FlexLayoutPanel](https://docs.wisej.com/docs/controls/containers/flexlayoutpanel), and [FlowLayoutPanel](https://docs.wisej.com/docs/controls/containers/flowlayoutpanel) add properties to their children. In web systems, this enables powerful features - when dropping a control into a `FlexLayoutPanel`, it gains properties like `FillWeight`, `AlignX`, `AlignY`. These properties are contextual to the [FlexLayoutPanel](https://docs.wisej.com/docs/controls/containers/flexlayoutpanel) container.

Other extenders, like [Animation](https://docs.wisej.com/docs/controls/extenders/animation) and [ToolTip](https://docs.wisej.com/docs/controls/extenders/tooltip), operate without UI, adding features to extended controls.

{% hint style="info" %}
Multiple instances of the same extender can coexist. Adding multiple `Animation` extenders enables defining different animations for each control, triggered by different events.
{% endhint %}

## IExtenderProvider

The [System.ComponentModel.IExtenderProvider](https://docs.microsoft.com/en-us/dotnet/api/system.componentmodel.iextenderprovider) is part of .NET's System.ComponentModel infrastructure, requiring one method:

### bool CanExtend(object target)

Returns `true` if the extender supports extending the target object. Microsoft's documentation provides comprehensive examples.

### ProvidePropertyAttribute

Extender classes declare their provided properties using [ProvidePropertyAttribute](https://docs.microsoft.com/en-us/dotnet/api/system.componentmodel.providepropertyattribute) declarations.

## IWisejExtenderProvider
