WPF中如何自动大写所有输入

35

有没有一种方法可以自动将 WPF 应用程序中的所有输入大写?

5个回答

83

您可以通过以下属性将所有输入转换为 TextBox 控件:

CharacterCasing="Upper"

要应用于整个应用程序中的所有TextBox控件,请为所有TextBox控件创建一个样式:

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

我知道这并不能解决所有输入大小写的问题,但大多数文本输入都会通过TextBox控件进行。 - Josh G
1
我认为应该使用“TargetType”而不是“DataType”:<Style TargetType="{x:Type TextBox}"> <Setter Property="CharacterCasing" Value="Upper"/> </Style> - Wes
@Wes:发现得好。DataType 用于 DataTemplates。已更新。 - Josh G

4
如果您想将单个TextBox的输入大写,而不是像上面的所有TextBox,可以使用以下方法:
<TextBox CharacterCasing="Upper"/>

1
我建议创建一个自定义的Textbox类,并覆盖一个事件以自动将文本大写。首先,这取决于您是否希望在输入时将文本大写或在输入完成后将其大写。
例如,对于输入完成后:
public class AutoCapizalizeTextBox: TextBox
{
  public AutoCapitalizeTextBox()
  {
  }

  public AutoCapitlizeTextBox()
  {
  }

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

    base.OnLostFocus(e);
  }
}

0

链接已损坏。 https://web.archive.org/web/20170210180855/http://www.mardymonkey.co.uk/blog/auto-capitalise-a-text-control-in-wpf/ 是其存档。 - Aaron D
这个解决方案只使用了预先构建的 DLL,没有展示如何编写代码来实现它。 - Aaron D

0

也许你可以使用一个转换器。 这是转换器的代码:

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();
        }
    }
}

你需要在“ResourceDictionary”或者你的“App.xaml”中引用它:
<ResourceDictionary xmlns:converters="clr-namespace:SistemaContable.GUI.WPF.Converters">
    <converters:CapitalizeFirstLetter x:Key="CapitalizeFirstLetter"/>
</ResourceDictionary>

你可以像这样使用它:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接