TOC

This article is currently in the process of being translated into Japanese (~83% done).

Basic controls:

The PasswordBox control

WPFで通常のテキストを編集するために、TextBoxを使います。しかしパスワードの編集にはどうでしょうか?機能はほとんど同じですが、パスワードをタイプしている時、人が肩越しに見るのを防ぐために入力した文字ではない何かをWPFで表示したいです。この目的のためにWPFにPasswordBoxコントロールがあります。これはTextBoxと同じように簡単に扱えます。以下に例で説明します。

<Window x:Class="WpfTutorialSamples.Basic_controls.PasswordBoxSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="PasswordBoxSample" Height="160" Width="300">
    <StackPanel Margin="10">
        <Label>Text:</Label>
        <TextBox />
        <Label>Password:</Label>
        <PasswordBox />
    </StackPanel>
</Window>

スクリーンショットでは、正確に同じテキストを二つのテキストボックスに入力しましたが、パスワードバージョンでは文字はドットに置き換えられています。PasswordCharプロパティを使えば実際の文字の代わりに何を使うかを制御できます。

<PasswordBox PasswordChar="X" />

このケースではドットの代わりに 'X' が使われます。パスワードの長さを制御したい場合はMaxLengthプロパティを使います。

<PasswordBox MaxLength="6" />

新しい例では両方のプロパティを使っています。

<Window x:Class="WpfTutorialSamples.Basic_controls.PasswordBoxSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="PasswordBoxSample" Height="160" Width="300">
    <StackPanel Margin="10">
        <Label>Text:</Label>
        <TextBox />
        <Label>Password:</Label>
        <PasswordBox MaxLength="6" PasswordChar="X" />
    </StackPanel>
</Window>

文字が 'X' に変わったこと、ボックスを6桁に制限したことに注意して下さい。

PasswordBoxとバインディング

PasswordBoxからパスワードを取得する必要がある時は、コードビハインドでPasswordプロパティを使います。しかし、セキュリティの理由からPasswordプロパティは依存プロパティとしてインプリメントされていません。これはバインド出来ないことを意味します。

これはあなたにとって重要であるかもしれませんし、そうではないかもしれません。すなわち、前に述べたように今でもコードビハインドからパスワードを読むことは出来ますが、MVVM実装のためや、データバインディングが好きな場合には、回避策が開発されています。詳しくはここで読めます。 http://blog.functionalfun.net/2008/06/wpf-passwordbox-and-data-binding.html


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!