Home

Awesome

Custom Xamarin.Forms.Entry Keyboard Return Button

NuGet

This SDK was officially merged into Xamarin.Forms v3.1.0.

Because this SDK supports Xamarin.Forms v2.5.0.280555, I will continue to maintain it for teams who have not yet upgraded to Xamarin.Forms v3.1.0 or higher.

For developers using Xamarin.Forms 3.1.0 or higher, I recommend removing this NuGet package from your csproj and using the APIs included in Xamarin.Forms: Xamarin.Forms.Entry.ReturnType & Xamarin.Forms.Entry.ReturnCommand.

ReturnType

ReturnTypeAndroidiOSUWP
Default
Done
Go
Next
Search
Send

Platform Support

PlatformSupportedVersion
Xamarin.iOSYesiOS 8+
Xamarin.iOS UnifiedYesiOS 8+
Xamarin.AndroidYesAPI 15+
Windows 10 UWPYes10+
Windows Phone SilverlightNo
Windows Phone RTNo
Windows Store RTNo
Xamarin.MacNo

This plugin can be consumed as a CustomRenderer Control or as an Effect.

Setup

iOS

In the FinishedLaunching method of AppDelegate.cs, add CustomReturnEntryRenderer.Init();:

public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
{
    public override bool FinishedLaunching(UIApplication app, NSDictionary options)
    {
        ...

        global::Xamarin.Forms.Forms.Init();
        
        EntryCustomReturn.Forms.Plugin.iOS.CustomReturnEntryRenderer.Init();

        ...
    }
}

Note: You must call EntryCustomReturn.Forms.Plugin.iOS.CustomReturnEntryRenderer.Init(); after you call global::Xamarin.Forms.Forms.Init();

Android

In the Oncreated method of MainActivity.cs, add CustomReturnEntryRenderer.Init();:

public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
    protected override void OnCreate(Bundle bundle)
    {
        ...

        global::Xamarin.Forms.Forms.Init(this, bundle);

        EntryCustomReturn.Forms.Plugin.Android.CustomReturnEntryRenderer.Init();

        ...
    }
}

Note: You must call EntryCustomReturn.Forms.Plugin.Android.CustomReturnEntryRenderer.Init(); after you call global::Xamarin.Forms.Forms.Init(this, bundle);

UWP

In the OnLaunched method of App.xaml.cs, add CustomReturnEntryRenderer.Init();:

public partial class App : Application
{
    protected override void OnLaunched(LaunchActivatedEventArgs e)
    {
        ...

        global::Xamarin.Forms.Forms.Init(e);

        EntryCustomReturn.Forms.Plugin.UWP.CustomReturnEntryRenderer.Init();

        ...
    }
}

Note: You must call EntryCustomReturn.Forms.Plugin.UWP.CustomReturnEntryRenderer.Init(); after you call global::Xamarin.Forms.Forms.Init(e);

Usage in Xamarin.Forms Project as a Custom Control

This plugin can be consumed as a CustomRenderer Control or as an Effect.

1. Set the ReturnType Property

The ReturnType property is an enum containing 6 different types: Default, Go, Next, Done, Send, Search.

Coded UI

var goReturnTypeCustomEntry = new CustomReturnEntry
{
    ReturnType = EntryCustomReturn.Forms.Plugin.Abstractions.ReturnType.Go
};

XAML UI

<ContentPage
    xmlns="http://xamarin.com/schemas/2014/forms"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    x:Class="SimpleXamlSample.CustomRendererPage"
    xmlns:entryCustomReturn="clr-namespace:EntryCustomReturn.Forms.Plugin.Abstractions;assembly=EntryCustomReturn.Forms.Plugin.Abstractions">

    <ContentPage.Content>

        <entryCustomReturn:CustomReturnEntry
            x:Name = "MyCustomReturnEntry"
            HorizontalOptions="Center"
            VerticalOptions="Center"
            ReturnType="Go"/>

    </ContentPage.Content>
</ContentPage>

Bindable Property

ReturnType can also be used as a Bindable Property to bind to a ViewModel

Coded UI

var viewModel = new MyViewModel();
BindingContext = viewModel;

var customReturnEntry = new CustomReturnEntry();
customReturnEntry.SetBinding(CustomReturnEntry.ReturnTypeProperty, nameof(MyViewModel.EntryReturnType));

XAML UI

<entryCustomReturn:CustomReturnEntry
    x:Name = "MyCustomReturnEntry"
    HorizontalOptions="Center"
    VerticalOptions="Center"
    ReturnType="{Binding EntryReturnType}"/>

2. Set the ReturnCommand Command

ReturnCommand will fire when the user finalizes the text in an entry with the return key.

Coded UI

goReturnTypeCustomEntry.ReturnCommand = new Command(() => Navigation.PushAsync(new ContentPage()));

XAML UI

Use the Coded UI example above to initialize a Command in the XAML Code Behind

Bindable Property

ReturnCommand can also be used as a Bindable Property to bind to a ViewModel

Coded UI

var viewModel = new MyViewModel();
BindingContext = viewModel;

var customReturnEntry = new CustomReturnEntry();
customReturnEntry.SetBinding(CustomReturnEntry.ReturnCommandProperty nameof(MyViewModel.EntryReturnCommand));

XAML UI

<ContentPage
    xmlns="http://xamarin.com/schemas/2014/forms"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:local="clr-namespace:SimpleXamlSample"
    x:Class="SimpleXamlSample.CustomRendererPage"
    xmlns:entryCustomReturn="clr-namespace:EntryCustomReturn.Forms.Plugin.Abstractions;assembly=EntryCustomReturn.Forms.Plugin.Abstractions"
    BindingContext="{Binding Source={local:MyViewModel}}">

    <ContentPage.Content>

        <entryCustomReturn:CustomReturnEntry
            x:Name = "MyCustomReturnEntry"
            HorizontalOptions="Center"
            VerticalOptions="Center"
            ReturnCommand="{Binding EntryReturnCommand}"/>

    </ContentPage.Content>
</ContentPage>

3. Set the ReturnCommandParameter Property

The ReturnCommandParameter property is an object that can be passed to the ReturnCommand property.

Coded UI

goReturnTypeCustomEntry.ReturnCommand = new Command<string>(async title => await DisplayAlert(title, "", "Ok"));
goReturnTypeCustomEntry.ReturnCommandParameter = "Return Button Tapped";

XAML UI

<ContentPage
    xmlns="http://xamarin.com/schemas/2014/forms"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    x:Class="SimpleXamlSample.CustomRendererPage"
    xmlns:entryCustomReturn="clr-namespace:EntryCustomReturn.Forms.Plugin.Abstractions;assembly=EntryCustomReturn.Forms.Plugin.Abstractions">

    <ContentPage.Content>

        <entryCustomReturn:CustomReturnEntry
            x:Name = "MyCustomReturnEntry"
            HorizontalOptions="Center"
            VerticalOptions="Center"
            ReturnCommandParameter="Return Button Tapped"/>

    </ContentPage.Content>
</ContentPage>

Bindable Property

ReturnCommandParameter can also be used as a Bindable Property to bind to a ViewModel

Coded UI

var viewModel = new MyViewModel();
BindingContext = viewModel;

var customReturnEntry = new CustomReturnEntry();
customReturnEntry.SetBinding(CustomReturnEntry.ReturnCommandParameterProperty, nameof(MyViewModel.EntryReturnCommandParameter));

XAML UI


<entryCustomReturn:CustomReturnEntry
    x:Name = "MyCustomReturnEntry"
    HorizontalOptions="Center"
    VerticalOptions="Center"
    ReturnCommandParameter="{Binding EntryReturnCommandParameter}"/>

Usage in Xamarin.Forms Project as an Effect

This plugin can be consumed as a CustomRenderer Control or as an Effect.

1. Set the ReturnType Property

The ReturnType property is an enum containing 6 different types: Default, Go, Next, Done, Send, Search.

Coded UI

var goReturnTypeEntry = new Entry()
CustomReturnEffect.SetReturnType(goReturnTypeEntry, EntryCustomReturn.Forms.Plugin.Abstractions.ReturnType.Go);

XAML UI

<ContentPage
    xmlns="http://xamarin.com/schemas/2014/forms"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    x:Class="SimpleXamlSample.CustomRendererPage"
    xmlns:entryCustomReturn="clr-namespace:EntryCustomReturn.Forms.Plugin.Abstractions;assembly=EntryCustomReturn.Forms.Plugin.Abstractions">

    <ContentPage.Content>

        <Entry
            x:Name = "GoReturnTypeEntry"
            HorizontalOptions="Center"
            VerticalOptions="Center"
            entryCustomReturn:CustomReturnEffect.ReturnType="{x:Static entryCustomReturn:ReturnType.Default}"/>


    </ContentPage.Content>
</ContentPage>

Bindable Property

ReturnType can also be used as a Bindable Property to bind to a ViewModel

Coded UI

var viewModel = new MyViewModel();
BindingContext = viewModel;

var customReturnEntry = new Entry();
customReturnEntry.SetBinding(CustomReturnEffect.ReturnTypeProperty, nameof(MyViewModel.EntryReturnType));

XAML UI

<Entry
    x:Name = "GoReturnTypeEntry"
    HorizontalOptions="Center"
    VerticalOptions="Center"
    entryCustomReturn:CustomReturnEffect.ReturnType="{Binding EntryReturnType}"/>

2. Set the ReturnCommand Command

ReturnCommand will fire when the user finalizes the text in an entry with the return key.

Coded UI

var goReturnTypeEntry = new Entry()
CustomReturnEffect.SetReturnCommand(goReturnTypeEntry, new Command(() => Navigation.PushAsync(new ContentPage()));

XAML UI

Use the Coded UI example above to initialize a Command in the XAML Code Behind

Bindable Property

ReturnCommand can also be used as a Bindable Property to bind to a ViewModel

Coded UI

var viewModel = new MyViewModel();
BindingContext = viewModel;

var customReturnEntry = new Entry();
customReturnEntry.SetBinding(CustomReturnEffect.ReturnCommandProperty, nameof(MyViewModel.EntryReturnCommand));

XAML UI

<ContentPage
    xmlns="http://xamarin.com/schemas/2014/forms"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:local="SimpleXamlSample"
    x:Class="SimpleXamlSample.CustomRendererPage"
    xmlns:entryCustomReturn="clr-namespace:EntryCustomReturn.Forms.Plugin.Abstractions;assembly=EntryCustomReturn.Forms.Plugin.Abstractions"
    BindingContext="{Binding Source={local:MyViewModel}}">

    <ContentPage.Content>

        <entryCustomReturn:CustomReturnEntry
            x:Name = "MyCustomReturnEntry"
            HorizontalOptions="Center"
            VerticalOptions="Center"
            entryCustomReturn:CustomReturnEffect.ReturnCommand="{Binding EntryReturnCommand}"/>

    </ContentPage.Content>
</ContentPage>

3. Set the ReturnCommandParameter Property

The ReturnCommandParameter property is an object that can be passed to the ReturnCommand property.

Coded UI

var goReturnTypeEntry = new Entry()
CustomReturnEffect.SetReturnCommand(goReturnTypeEntry, new Command<string>(async title => await DisplayAlert(title, "", "Ok")));
CustomReturnEffect.SetReturnCommandParameter(goReturnTypeEntry, "Return Button Tapped");

XAML UI

<ContentPage
    xmlns="http://xamarin.com/schemas/2014/forms"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    x:Class="SimpleXamlSample.CustomRendererPage"
    xmlns:entryCustomReturn="clr-namespace:EntryCustomReturn.Forms.Plugin.Abstractions;assembly=EntryCustomReturn.Forms.Plugin.Abstractions">

    <ContentPage.Content>

        <entryCustomReturn:CustomReturnEntry
            x:Name = "MyCustomReturnEntry"
            HorizontalOptions="Center"
            VerticalOptions="Center"
            entryCustomReturn:CustomReturnEffect.ReturnCommandParameter="Return Button Tapped"/>

    </ContentPage.Content>
</ContentPage>

Bindable Property

ReturnCommandParameter can also be used as a Bindable Property to bind to a ViewModel

Coded UI

var viewModel = new MyViewModel();
BindingContext = viewModel;

var customReturnEntry = new Entry();
customReturnEntry.SetBinding(CustomReturnEffect.ReturnCommandParameterProperty, nameof(MyViewModel.EntryReturnCommandParameter));

XAML UI

<entryCustomReturn:CustomReturnEntry
    x:Name = "MyCustomReturnEntry"
    HorizontalOptions="Center"
    VerticalOptions="Center"
    entryCustomReturn:CustomReturnEffect.ReturnCommandParameter="{Binding EntryReturnCommandParameter}"/>