UWPアプリケーション(Windows 10用)のTextBoxにユーザーが入力したテキストを強制的に大文字にしたいとします。 WinFormsとWPFの両方には、CharacterCasingで組み込みを行うための簡単な方法がありますが、UWPではできません。UWPでテキストボックスを大文字にする(Windows 10)
2つの異なる方法を試しました。 AlexDreneaというオンラインの例で、私は自分でコンバータを構築しました。両方の状況で、テキストボックスに "test"と入力すると、テキストが混乱することがわかりました(たとえば、 "test"は "TSTE"と表示されます)。
私は本当にコンバータが動作すると思っていました。それを改善するために何ができるかについての提案は手紙をつまずくことはありませんか?
XAML
<Page
x:Class="MakeUppercaseEx2.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:MakeUppercaseEx2"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Page.Resources>
<local:TextToUppercaseConverter x:Name="MyUppercaseConverter" />
</Page.Resources>
<StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<TextBox Name="txtExample2" Margin="10" Text="{Binding ElementName=txtExample2, Path=Text, Converter={StaticResource MyUppercaseConverter}}" />
<Button Name="btnDisplay" Margin="10" Content="Display" Click="btnDisplay_Click"/>
<TextBlock Name="lblStatus" Margin="10" Text="" />
</StackPanel>
</Page>
分離コード
using System;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Data;
namespace MakeUppercaseEx2
{
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
private void btnDisplay_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e) {
lblStatus.Text = "You entered: " + txtExample2.Text;
}
}
public class TextToUppercaseConverter : IValueConverter {
public object Convert(object value, Type targetType, object parameter, string language) {
string sTypedValue = System.Convert.ToString(value);
if (string.IsNullOrEmpty(sTypedValue)) {
return "";
}
return sTypedValue.ToUpper();
}
public object ConvertBack(object value, Type targetType, object parameter, string language) {
throw new NotImplementedException();
}
}
}
TextChangingイベントを使用して、入力されたテキストを取得し、大文字のバージョンを返すことができます。このイベントを使用すると、元の小文字がTextChangedのようにタイプされて削除されていることがわかりません。 – jsmyth886
@ jsmyth886 'CharacterCasing'を' Upper'に設定するとWPFで 'TextChanged'の代わりに' TextChanged'を明示的に使用しました。何かを入力すると、元の入力テキストが下に表示されず、上に変更されます。ストレートに大文字が表示されます。私はここでそれを複製したかったのです。 – AVK
@AVK - コードは機能し、大文字にしますが、コードビハインドから新しいコントロールにアクセスすることはできません。たぶん私は何かが欠けているかもしれませんが、コードビハインドからテキスト値を取得しようとすると(たとえば:string sWhatWasTyped = txtExample。テキスト; )私はエラーが表示されます:名前 'txtExample2'は現在のコンテキストに存在しません。 – ThePeter