# Behaviors In `Sharp.UI`, you can add functionality to user interface controls using behaviors. Behaviors allow you to add functionality to controls without having to subclass them. You can add a behavior to a control by using the `Behaviors` method and passing in an instance of the behavior class. For example: ```cs new Entry("Enter text...", out var entry).Text("") .Behaviors(new NumericValidationBehavior()); ``` The behavior class, `NumericValidationBehavior`, implements the `OnAttachedTo` and `OnDetachingFrom` methods to subscribe and unsubscribe to the `TextChanged` event of the `Entry` control. The behavior also defines the `OnEntryTextChanged` method, which is triggered when the text in the `Entry` control changes. This method validates if the text is a valid number, and sets the text color accordingly. ```cs public class NumericValidationBehavior : Behavior<Entry> { protected override void OnAttachedTo(Entry entry) { entry.TextChanged += OnEntryTextChanged; base.OnAttachedTo(entry); } protected override void OnDetachingFrom(Entry entry) { entry.TextChanged -= OnEntryTextChanged; base.OnDetachingFrom(entry); } void OnEntryTextChanged(object sender, TextChangedEventArgs args) { double result; bool isValid = double.TryParse(args.NewTextValue, out result); ((Entry)sender).TextColor = isValid ? Colors.Green : Colors.Red; } } ``` # Attached Behaviors If you want to define a behavior using a style, you can use attached properties. You can create attached behaviors using the `AttachedBehavior<TView, TBehavior>` class. For example: ```cs public class NumericValidationStyleBehavior : AttachedBehavior<Entry, NumericValidationStyleBehavior> { protected override void OnAttachedTo(Entry entry) { entry.TextChanged += OnEntryTextChanged; base.OnAttachedTo(entry); } protected override void OnDetachingFrom(Entry entry) { entry.TextChanged -= OnEntryTextChanged; base.OnDetachingFrom(entry); } void OnEntryTextChanged(object sender, TextChangedEventArgs args) { double result; bool isValid = double.TryParse(args.NewTextValue, out result); ((Entry)sender).TextColor = isValid ? Colors.Green : Colors.Red; } } ``` You can then apply the attached behavior using a style in your `ContentPage`: ```cs public class AttachedBehaviorPage : ContentPage { public AttachedBehaviorPage() { Resources = new ResourceDictionary { new Style<Entry> { NumericValidationStyleBehavior.Enable(true) } }; Content = new VStack { new Entry("Enter text...", out var entry).Text("") } .CenterVertically()); } } ```