Standard Controls - TextBox

 テキストを入力するためのコントロールです。

ページ内リンク

Text プロパティ

 TextBox に入力されるテキストは Text プロパティで取得または設定できます。 次のコードでは、入力されたテキストを ViewModel 側で処理するようにデータバインドする例を示します。

<Window x:Class="WpfApplication2.Views.MainView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainView" Height="150" Width="250">
    <StackPanel>
        <TextBox Text="{Binding InputText, UpdateSourceTrigger=PropertyChanged}" />
        <TextBlock Text="{Binding OutputText}" />
    </StackPanel>
</Window>
Code 1 : TextBox によるテキスト入力
TextBox コントロールの下に TextBlock コントロールを表示しています。 TextBox コントロールに入力されたテキストを処理して、 その結果を TextBlock コントロールのテキストに出力します。 TextBox コントロールの Text プロパティに対して InputText プロパティをデータバインドしていますが、 同時に、UpdateSourceTrigger に PropertyChanged を指定しています。 UpdateSourceTrigger とは、データバインドされたソース (ViewModel) に対して、 その変更通知をどのタイミングでおこなうかを指定するプロパティです。 既定値は LostFocus といって、そのコントロールがフォーカスを失ったときに変更通知をおこないます。 これに対して PropertyChanged は、プロパティ値が変更されたらただちに変更通知をおこなうようになります。 この場合、TextBox コントロールの Text プロパティに対して PropertyChanged を指定しているため、 テキストが入力されたらただちに変更通知がおこなわれるようになります。

 ViewModel 側のコードを次に示します。

namespace WpfApplication2.ViewModels
{
    using YKToolkit.Bindings;

    public class MainViewModel : NotificationObject
    {
        private string inputText;
        public string InputText
        {
            get { return inputText; }
            set
            {
                if (SetProperty(ref inputText, value))
                {
                    OutputText = InputText.ToUpper();
                }
            }
        }

        private string outputText;
        public string OutputText
        {
            get { return outputText; }
            set { SetProperty(ref outputText, value); }
        }
    }
}
Code 2 : 入力された文字列を大文字にして出力用テキストに代入する
InputText プロパティが変更されたときに、OutputText プロパティをその大文字に変換した文字列として設定しています。

 実行結果を下図に示します。

Fig.1 : アルファベットを入力すると大文字に変換されて出力される
TextBox コントロールにアルファベットを入力すると、すべて大文字に変換されて出力されます。

読み取り専用にするには

 IsEnabled プロパティを false にすると、テキスト入力を受け付けなくなりますが、 そのテキストを選択することもできなくなるため、テキストをコピーできなくなります。 TextBox コントロールを読み取り専用とするには、IsReadOnly プロパティを使います。

<Window x:Class="WpfApplication2.Views.MainView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainView" Height="150" Width="250">
    <StackPanel>
        <TextBox Text="読み取り専用テキストです。" IsReadOnly="True" />
    </StackPanel>
</Window>
Code 3 : IsReadOnly プロパティによる読み取り専用設定
Fig.2 : 読み取り専用の TextBox はテキスト選択できる
読み取り専用にしてしまうと、文字入力のときには表示されていたキャレット (点滅する縦線) が表示されなくなってしまいますが、 IsReadOnlyCaretVisible プロパティを true にすることで、 読み取り専用でもキャレットが表示されるようになります。
<TextBox Text="読み取り専用テキストです。" IsReadOnly="True" IsReadOnlyCaretVisible="True" />
Code 4 : IsReadOnlyCaretVisible プロパティの指定
Fig.3 : 読み取り専用でもキャレットが表示されるようになる

Designed by CSS.Design Sample