a_hardin
a_hardin

Reputation: 5260

Automatically capitalize all input in WPF

Is there a way to automatically capitalize all input throughout a WPF app?

Upvotes: 37

Views: 23250

Answers (5)

Gustavo Gavancho
Gustavo Gavancho

Reputation: 25

Perhaps you can use a converter. Here's the code of the converter:

using System;
using System.Globalization;
using System.Windows.Data;
namespace SistemaContable.GUI.WPF.Converters
{
    public class CapitalizeFirstLetter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value != null)
            {
                string stringToTitleCase = culture.TextInfo.ToTitleCase(value.ToString());
                return stringToTitleCase;
            }
            else
            {
                return null;
            }
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return value.ToString();
        }
    }
}

You need to reference it in a "ResourceDictionary" or in your "App.xaml":

<ResourceDictionary xmlns:converters="clr-namespace:SistemaContable.GUI.WPF.Converters">
    <converters:CapitalizeFirstLetter x:Key="CapitalizeFirstLetter"/>
</ResourceDictionary>

And you can use it like this:

<TextBox x:Name="txtNombre" Text="{Binding Usuario.Nombre, Converter={StaticResource CapitalizeFirstLetter}, UpdateSourceTrigger=PropertyChanged}"/>

Upvotes: 0

vahlala
vahlala

Reputation: 395

If you want to capitalize the input for a single TextBox rather than all TextBoxes like above, you can use the following:

<TextBox CharacterCasing="Upper"/>

Upvotes: 4

Kier
Kier

Reputation: 1

I don't know if this'll help, it capitalizes all the first letters in the sentence.

http://www.mardymonkey.co.uk/blog/auto-capitalise-a-text-control-in-wpf/

Upvotes: 0

Josh G
Josh G

Reputation: 14256

You can case all input into TextBox controls with the following property:

CharacterCasing="Upper"

To apply to all TextBox controls in the entire application create a style for all TextBox controls:

<Style TargetType="{x:Type TextBox}">
    <Setter Property="CharacterCasing" Value="Upper"/>
</Style>

Upvotes: 85

Lucas B
Lucas B

Reputation: 12013

I recommend creating a custom Textbox class and override an event to automatically capitalize the text. First, this depends on if you want the text to be capitalize as they type or after input is finished.

E.g. for after input is finished

public class AutoCapizalizeTextBox: TextBox
{
  public AutoCapitalizeTextBox()
  {
  }

  public AutoCapitlizeTextBox()
  {
  }

  protected override void OnLostFocus(EventArgs e)
  {
    this.Text = this.Text.ToUpper();

    base.OnLostFocus(e);
  }
}

Upvotes: 1

Related Questions