[WPF] WPF入門 ~コントロール [TextBox]~

投稿日 : 2009年4月29日 14:52
今回はTextBox(System.Windows.Controls.TextBox)です。
まずはMSDNの説明をみてみましょう。

書式なしテキストの表示や編集に使用できるコントロールを表します。

TextBoxコントロールはお馴染みのコントロールかと思います。
MSDNの説明の通り、基本的な文字列の編集が行えるコントロールです。
また、テキストのコピー・カット・選択や複数行表示なども行えます。
まずはTextBoxの簡単な使用例を見てみましょう。

- XAML -
<Window x:Class="Window1"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   Title="Window1" Background="DarkBlue" Width="150" Height="150">
    <StackPanel>
        <!-- プロパティ使用 -->
        <TextBox Margin="5" Text="Sample Text" />
        <!-- コンテンツプロパティ使用 -->
        <TextBox Margin="5">Sample Text</TextBox>
    </StackPanel>
</Window>



上記の例で分かるとおりに、TextBoxコントロールはTextプロパティを使用してテキストの操作を行います。
また、TextBoxコントロールのコンテンツプロパティはTextプロパティが指定されている為、コンテンツプロパティに指定出来るのは文字列のみになります。よって他のコントロールなどを子要素にする事は出来ません。

TextBoxコントロールは既定で改行を行わないようになっています。
テキストの改行を行いたい場合はTextWrappingプロパティを使用します。
改行を行う例を見てみましょう。

- XAML -
<Window x:Class="Window1"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   Title="Window1" Background="DarkBlue" SizeToContent="WidthAndHeight">
    <StackPanel>
        <TextBox Margin="5" Width="100" TextWrapping="NoWrap">
            改行なし ABCDEFGHIJKLMNOPQRSTUVWXYZ
        </TextBox>
        <TextBox Margin="5" Width="100" Height="40" TextWrapping="Wrap" >
            改行あり ABCDEFGHIJKLMNOPQRSTUVWXYZ
        </TextBox>
        <TextBox Margin="5" Width="100" Height="40" TextWrapping="WrapWithOverflow" >
            改行あり ABCDEFGHIJKLMNOPQRSTUVWXYZ
        </TextBox>
    </StackPanel>
</Window>



このようにTextWrappingプロパティを使用する事によって改行をする事が出来ます。
TextWappingプロパティの動作詳細についてはMSDNでとても分かりやすい物がありますので、そちらを参考にして下さい。

テキスト折り返しの設定

最後にTextBoxコントロールを使用する上でのワンポイントです。
TextBoxコントロールのコントロールサイズは基本的に設定されているフォントサイズと、Textプロパティに設定されている文字列によって決定されます。
よって同一のテキストでもフォントサイズが異なるだけでサイズが異なります。



この特性を知らないと、Gridコントロールなど配置した要素がストレッチされるレイアウトコントロールを使用する場合、レイアウトが正しく作れない事があります。
そのGridコントロールを使用した例を見てみましょう。

- XAML -
<Window x:Class="Window1"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   Title="Window1" SizeToContent="WidthAndHeight">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition Width="150" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="35" />
            <RowDefinition Height="35" />
            <RowDefinition />
        </Grid.RowDefinitions>
 
        <Label Margin="5" Grid.Column="0" Grid.Row="0" Content="_UserID" />
        <TextBox Margin="5" Grid.Column="1" Grid.Row="0" />
 
        <Label Margin="5" Grid.Column="0" Grid.Row="1" Content="_Password" />
        <TextBox Margin="5" Grid.Column="1" Grid.Row="1" />
 
        <Button Margin="5" Grid.Column="1" Grid.Row="2">_OK</Button>
    </Grid>
</Window>



このようにGridの行・列のサイズを指定し子要素はそのサイズに合わせストレッチしている場合、きちんとサイズが合っていれば良いのですが、フォントサイズが途中で変更になった場合などに不都合が生じます。
上記例のTextBoxのフォントサイズを変更するとこのようになります。



このようにTextBoxコントロールの特性をきちんと理解し、レイアウト作成時に考慮する事が重要です。
今回はお馴染みのTextBoxコントロールでした。

to be continue・・・
コメントの入力
タイトル
名前
Url
コメント