WPF 標準コントロールデモアプリ › PasswordBox

PasswordBox Inputs

PasswordBox はパスワード入力専用のコントロールです。入力した文字はマスク文字で表示され、セキュリティのために SecureString として管理されます。TextBox と異なり、Password プロパティへの直接データバインドはサポートされていません。

概要

WPF の PasswordBox は、パスワードなどの機密情報を入力するための専用コントロールです。入力された文字は PasswordChar(デフォルト: ●)でマスクされ、クリップボードへのコピーもできません。

セキュリティ上の理由から、Password プロパティはデータバインドの対象として登録されていません(DependencyProperty ではなく通常の CLR プロパティ)。MVVM でパスワードを扱うには、PasswordChanged イベントをコードビハインドで処理するか、カスタムの添付ビヘイビアを使用します。

MaxLength プロパティで入力できる最大文字数を制限できます。パスワードポリシーに合わせて適切な上限を設定します。0(デフォルト)は無制限です。

CaretBrushSelectionBrushSelectionOpacity などの外観プロパティはほかの TextBox 系コントロールと同様に使用できます。

画面キャプチャ

passwordbox demo screen

デモしているプロパティ

以下のプロパティが WPF 標準コントロールデモアプリでインタラクティブにデモされています。

プロパティ設定値説明
PasswordCharchar (デフォルト: ●)マスク文字の種類を変更したい場合(例: 欧米風の * に変えたい)に設定します。入力文字の代わりに指定した文字が表示され、入力文字数だけマスク文字が並びます。デフォルト()は日本のアプリで一般的ですが、セキュリティポリシーや UI デザインに合わせて変更できます。はまりポイント: PasswordCharchar 型のため ViewModel にバインドできません(DependencyProperty ではありますが、セキュリティ上の理由で通常バインドは推奨されません)。マスク文字を動的に変更する場合はコードビハインドから直接設定してください。
MaxLengthint (0 = 無制限)パスワードポリシーで最大文字数制限がある場合(例: 最大128文字)に設定します。設定した文字数に達すると、それ以降の入力が無音でブロックされます(エラー表示はされません)。0(デフォルト)は無制限です。はまりポイント: MaxLength は UI レベルのみの制限です。API やサーバーへの送信前にも必ずサーバー側でバリデーションを実施してください。クライアント側のみの制限は容易にバイパスされます。
CaretBrushBrushカスタムテーマや高コントラストモードで、テキストカーソル(キャレット)がテーマカラーと同化して見えにくくなる場合に設定します。指定した色でキャレットが描画されるようになり、入力位置が見やすくなります。はまりポイント: CaretBrush は Windows 10 以降の WPF テーマ(aero2)でのみ有効です。古い Windows テーマ環境では無視されることがあります。テーマ切り替えをサポートするアプリでは動作確認が必要です。
SelectionBrushBrushカスタムテーマのアクセントカラーに合わせた選択ハイライト色が必要な場合に設定します。テキスト選択時のハイライト色が指定した Brush で描画されます。SelectionOpacity と組み合わせることでテーマカラーを保ちながらアクセシブルなコントラスト比を維持できます。はまりポイント: SelectionBrush に不透明な明るい色を設定すると暗いテーマで視認性が低下することがあります。SelectionOpacity を調整してテキストと選択ハイライトのコントラストを確保してください。
SelectionOpacitydouble (0.0-1.0)選択ハイライトの透明度を調整して、ハイライト下のテキストの視認性を確保したい場合に設定します。0.0(完全透明)から 1.0(完全不透明)の範囲で指定し、デフォルトは 0.4 です。はまりポイント: 0.0 に設定すると選択範囲が完全に見えなくなりアクセシビリティが著しく低下します。最低でも 0.2 以上に保ち、選択していることがわかる視覚フィードバックを維持してください。
IsInactiveSelectionHighlightEnabledboolパスワード確認フォームなど、複数の PasswordBox を並べて比較する場面で、フォーカスが移動してもどの範囲を選択していたかを視覚的に保持したい場合に True に設定します。True にするとフォーカスを失ったあとも選択ハイライトが維持されます。デフォルト(False)ではフォーカスを失うと選択ハイライトが消えます。はまりポイント: ほとんどのシナリオでは False(デフォルト)が適切です。True にすると複数のフィールドで同時に選択表示が残り、ユーザーが混乱する可能性があります。

XAML 使用例

<StackPanel>
  <Label Content="パスワード:" Target="{Binding ElementName=pwBox}" />
  <PasswordBox x:Name="pwBox"
               MaxLength="128"
               PasswordChar="●"
               Width="200"
               PasswordChanged="PasswordBox_PasswordChanged" />
</StackPanel>

<!-- コードビハインドでパスワードを取得 -->
<!-- private void PasswordBox_PasswordChanged(object s, RoutedEventArgs e) -->
<!-- { ViewModel.PasswordHash = Hash(((PasswordBox)s).Password); } -->

主な使用例

ヒントとベストプラクティス

関連コントロール

ソースコード

このデモ画面のソースコードは GitHub で公開しています。

GitHub で PasswordBox のソースコードを見る →