Creating custom controls
Creating custom Button
Section titled “Creating custom Button”/// <summary>/// Button with some additional options/// </summary>public class TurboButton : Button{ public static readonly BindableProperty StringDataProperty = BindableProperty.Create( propertyName: "StringData", returnType: typeof(string), declaringType: typeof(ButtonWithStorage), defaultValue: default(string));
public static readonly BindableProperty IntDataProperty = BindableProperty.Create( propertyName: "IntData", returnType: typeof(int), declaringType: typeof(ButtonWithStorage), defaultValue: default(int));
/// <summary> /// You can put here some string data /// </summary> public string StringData { get { return (string)GetValue(StringDataProperty); } set { SetValue(StringDataProperty, value); } }
/// <summary> /// You can put here some int data /// </summary> public int IntData { get { return (int)GetValue(IntDataProperty); } set { SetValue(IntDataProperty, value); } }
public TurboButton() { PropertyChanged += CheckIfPropertyLoaded; }
/// <summary> /// Called when one of properties is changed /// </summary> private void CheckIfPropertyLoaded(object sender, PropertyChangedEventArgs e) { //example of using PropertyChanged if(e.PropertyName == "IntData") { //IntData is now changed, you can operate on updated value } }}Usage in XAML:
<?xml version="1.0" encoding="utf-8" ?><ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="SomeApp.Pages.SomeFolder.Example" xmlns:customControls="clr-namespace:SomeApp.CustomControls;assembly=SomeApp"> <StackLayout> <customControls:TurboButton x:Name="exampleControl" IntData="2" StringData="Test" /> </StackLayout></ContentPage>Now, you can use your properties in c#:
exampleControl.IntDataNote that you need to specify by yourself where your TurboButton class is placed in your project. I’ve done it in this line:
xmlns:customControls="clr-namespace:SomeApp.CustomControls;assembly=SomeApp"You can freely change “customControls” to some other name. It’s up to you how you will call it.