テキストボックス、リッチテキストボックスとPasswordBox:WPFは、テキストを入力するための3つのコントロールを提供します。PasswordBoxコントロールは、直接Controlクラスから継承されました。テキストボックスとリッチテキストボックスコントロールは、間接的にTextBoxBaseクラスから継承されました。
別のコンテンツコントロールとのこぎり以前は、コンテンツタイプのテキストボックスが限定されている含めることができます。TextBoxコントロールは、常に(Textプロパティによって提供された)文字列を格納しています。攻撃の特定の種類を削減するために、それは内部的にSecureStringプロパティを使用していますが、PasswordBoxコントロールも、(Passwordプロパティによって提供される)文字コンテンツを処理します。唯一のRichTextBoxコントロールは、より複雑なコンテンツを格納することができます:FlowDocumentオブジェクトは、要素の複雑な組み合わせを含めることができます。
複数行テキスト
TextBoxコントロールは、典型的には、単一のテキストを格納された(文字の数は、MaxLengthプロパティを設定することによって制限することができます)。しかし、多くの場合、あなたは複数行のテキストボックスを作成したいと思うでしょう大量のコンテンツを処理する必要があります。このような場合のために、TextWrappingラップまたはWrapWithOverflowのプロパティ。プロパティがTextWrappingラップに設定されている場合、それは常に2つの列に特に長い単語を設定し、コントロールの端で折り返されます。プロパティはTextWrapping WrapWithOverflowに設定されている場合、場合改行アルゴリズムは、いくつかの右端を越えて延伸運動を可能にする適切な位置(例えば、空間またはハイフンなど)変換線を、発見されました。
テキストボックスに自動的に複数行のテキストを表示するために、サイズが十分に大きく設定する必要があります。ハードコードされた高さであるべきではない設定する場合(例えば、異なるフォントサイズ、レイアウトに適合しないと問題を引き起こす可能性)、および使用MinLines MAXLINESプロパティに容易です。MinLines属性は、テキストボックスに表示される行の最小数です。例えば、プロパティ値MinLines 2と、少なくとも二列の高さにテキストボックスの高さを増加させるであろう。スペースが不足コンテナである場合は、テキストボックスの一部を切断することができます。テキストボックスの行MAXLINES財産の最大数を表示することができます。拡張されたテキストボックスがコンテナに合わせてあっても(例えば、行または比例グリッドコントロールの寸法を変えるDockPanelの最後の要素)は、この制限を超えていません。
テキストボックスのサポートラップした場合、より多くのテキストを入力することができ、ユーザは視線ですぐに表示することができます。そのため、可視またはAutoにVerticalScrollBarVisibilityプロパティによって、スクロールバーが常に表示されている追加またはオンデマンド(も珍しい水平スクロールバーを表示するように設定HorizontalScrollBarVisibilityプロパティをすることができます)重要です。
あなたは(通常は、テキストボックスとプレスのデフォルトボタンをトリガするためにEnterキー)ハードキャリッジリターンを入力しEnterキーを押すことにより、複数行のテキストボックスにユーザーを許可したい場合があります。キーテキストボックスを入力するためのサポートを確保するために、AcceptsReturnプロパティがtrueに設定する必要があります。AcceptsTabsプロパティは、ユーザーがTabキーを挿入できるようにするために設けられてもよいです。そうでない場合には、TabキーザTabキーは、フォーカス制御を得る下位に焦点にフォーカスを移動します。
いくつかの例では、テキストボックス内のテキストを表示するために、純粋に作成することができます。これは、テキストの編集を防ぐために、trueにIsReadOnlyプロパティことができます。無効にしたテキストボックスは、(クリップボードへのコピーをサポートしていない)、テキスト選択をサポートしていないグレー表示のテキストを表示され、スクロールをサポートしていないため、無効にテキストボックスにfalseにIsEnabledプロパティによってベスト。
第二には、テキストを選択します
クリックして、Shiftキーダウン、マウス、または保留をドラッグしてテキストを選択し、テキストを移動するには、矢印キーを使用して、任意のテキストボックス缶で。TextBoxのクラスもしたselectionStart、SelectionLengthとSelectedTextプロパティを使用する能力、現在選択されているテキストを選択するか、変更することで、テキストのプログラミング意思決定を提供します。
したselectionStart属性が選択されたテキストの開始位置を決定し、この位置は0から開始されます。たとえば、プロパティが10に設定されている場合、テキストボックス11で最初に選択した文字の最初の文字。SelectionLength選択された文字属性は、合計数(0は文字が選択されていない示す)を示しています。最後に、SelectedTextプロパティはすぐに確認するか、テキストボックスに、選択したテキストを変更することができます。これは、SelectionChangedイベントによってテキスト選択プロセスの変化に対応していてもよいです。
< ウィンドウクラス、X = "Controls.TextBoxTest" のxmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" のxmlnsを:X = "http://schemas.microsoft.com/winfx/2006 / XAML " タイトル= "TextBoxTest" 高さ= "300" 幅= "300" > < グリッドマージン= "5" > < Grid.RowDefinitions > < RowDefinition 高さ= "2 *" > </ RowDefinition > < RowDefinition 高さ=" *」> </ RowDefinition > </Grid.RowDefinitions > < テキストボックス 名= "TXT" VerticalScrollBarVisibility = "オート" TextWrapping = "ラップ" AcceptsReturn = "True"を SelectionChanged = "txt_SelectionChanged" SpellCheck.IsEnabled = "真の" >真理省は含まれている、それは3000件の客室にグランドレベルより上、言って、下記の波及効果を対応されました。ロンドン点在同様の外観とサイズのわずか3他の建物がありました。だから、完全に彼らが勝利マンションの屋上から、あなたが同時にそれらのすべての4つを見ることができたことを周囲のアーキテクチャを矮星でした。彼らは、政府の装置全体を分割し、その間に4つの省庁の家でした。ニュース、娯楽、教育、およびファインアーツで自身を懸念真実省、。戦争で自分自身を懸念平和省、。法と秩序を維持愛省、。そして、経済情勢を担当していましたプレンティ、省。彼らの名前、ニュースピークで:Minitrue、Minipax、Miniluv、およびMiniplenty。</テキストボックス> < ScrollViewerのフォアグラウンド= "青" Grid.Row = "1" 証拠金= "0,10,0,5" VerticalScrollBarVisibility = "自動" > < StackPanelの> < TextBlockの>現在の選択:</ TextBlockの> < TextBlockの 名前= "txtSelection" TextWrapping = "ラップ" > </ のTextBlock > </ StackPanelの> </ ScrollViewerの> </ グリッド> </ ウィンドウ>
プライベート 無効 txt_SelectionChanged(オブジェクト送信者、RoutedEventArgs e)の { 場合(txtSelection == nullの)リターン。 txtSelection.Text = String.Formatの( " {2} \」{0}から{1} \された選択" 」、 ; txt.SelectionStart、txt.SelectionLength、txt.SelectedText) }
TextBoxのクラスもAutoWordSelectionは、テキスト選択動作を制御プロパティを提供します。このプロパティがtrueに設定されている場合は、テキストボックス内のすべての時間を、マウスをドラッグすると、テキストは単語全体を選択します。
もう1つの便利な機能は、ユーザーが最後の操作を元に戻すことを可能にするのTextBoxコントロール元に戻す、です。長い無CanUndo falseにプロパティセットなどのように、コードはアンドゥ機能(アンドゥを呼び出す()メソッド)により得られ、得られたのCtrl + Zショートカット機能を使用することができます。
第三に、スペルチェック
テキストボックスは、より多くの特別な機能を提供 - 統合スペルチェッカーを、この機能はテキストで認識されませんその下の波線の下線の色も単語を追加。単語を認識し、可能な正しい単語のリストから選択することができないユーザーを右クリックします。
以下のようにTextBoxコントロールのスペルチェック、SpellCheck.IsEnabled依存関係プロパティの値セットを、有効にするには:
< TextBoxのSpellCheck.IsEnabled = "真の" > ... </ のTextBox >
スペルチェッカーWPF(Officeなど)他のソフトウェアに依存しない独自の機能です。どの言語辞書を決定するために、キーボード入力の設定をスペルチェック。デフォルト設定は、テキストボックスコントロール言語プロパティによってFrameworkElementからプロパティ型継承上書きされることがあり、また、XML <テキストボックス>要素内に設けられていてもよい:langの特性。英語、スペイン語、フランス語、ドイツ語:しかし、WPFスペルチェッカーは、現在4ヶ国語に閉じ込められています。SpellingReformプロパティは、ルールはフランス語とドイツ語に適用されるスペルを変更するかどうかを1990年以降のセットに使用することができます。
WPFを使用すると、辞書をカスタマイズするスペルミス(そしてやがて右クリック勧告として使用)がないことをするシリーズを追加することができます。これを行うには、最初の辞書ファイルを作成する必要がありますが、辞書ファイルはテキストファイル.lex拡張名です。辞書ファイル内の単語のリストを追加します。各単語は別々の行に配置され、単語の順番は重要ではありません。
あなたは辞書ファイルを作成すると、TextBoxコントロールのを確認してくださいSpellCheck.IsEnabledプロパティがtrueに設定されています。最後に、カスタム辞書に関連するSpellCheck.CustomDictionariesウリオブジェクト属性ポイントを使用しています。次の例に示すように、XAMLで代替URIオブジェクト場合は、まず、システム名前空間に導入されなければなりません。
< ウィンドウ×:クラス= "Controls.CustomSpellChecker" のxmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" のxmlnsを:X = "http://schemas.microsoft.com/winfx/2006 / XAML " のxmlns:SYS = "CLR名前空間:システム、アセンブリ=システム" タイトル= "CustomSpellChecker" 高さ= "300" 幅= "300" > < グリッドマージン= "5" > < テキストボックスSpellCheck.IsEnabled =" TRUE 「TextWrapping =」ラップ」 テキスト= "今スペルチェッカーが棘融解と申し出acantholysiのための右の補正を認識" > < SpellCheck.CustomDictionaries > < SYS:ウリ>パック://アプリケーション:,,, /コントロール、コンポーネント/ CustomWords.lex </ SYS:ウリ> </ SpellCheck.CustomDictionaries > </ テキストボックス> </ グリッド> </ ウィンドウ>
四、PasswordBox
PasswordBoxテキストボックスは、同様に見えるが、実際には、(文字が異なるPasswordChar入力シールド性を設定することによって選択することができる)表示文字列円記号によって遮蔽されます。また、PassworBoxコントロールは、クリップボードをサポートしていないので、内のテキストをコピーすることはできません。
TextBoxのクラスと比較して、PassworBoxは、より多くのユーザーインターフェイスを合理化。テキストボックスクラスは、その提供MaxLengthプロパティに非常に類似して、クリア()、(貼り付け)とのSelectAll()メソッドと、変更イベントを提供するとき、トリガテキスト(PasswordChangedイベント)。TextBoxクラスとPassworBox最も重要な違いは、内部作業ということです。プロパティは、しかし、唯一のオブジェクトSystem.Security.SecureStringのPasswordBoxクラス内、読み、通常の文字列としてテキストのパスワードを設定するために使用することができますが。
そして、一般的なテキストはSecureStringは、プレーンテキストオブジェクトで、非常によく似ています。違いは、メモリ内の記憶装置です。メモリに保存されている暗号化された形でSecureString。キーはランダムな文字列が生成された暗号化するために使用され、ディスクメモリに書き込まれることはありませんに格納されます。コンピュータがクラッシュした場合でも、最終的な結果は、それが不可能である悪質なユーザーデータは、ページファイルをチェックして、パスワードを取得します。見つかった場合でも、唯一の暗号化されたバージョンを検索します。
SecureStringクラスには、内容を破棄するために必要な機能を提供します。あなたはSecureString.Dispose()メソッドを呼び出すと、メモリ内のパスワードデータが上書きされます。すべての暗号化情報は、書き換え可能なメモリから消去され、任意の方法で再利用することができないというこの保証します。予想されるように制御が破棄されたとき、PassworBox制御が自動的に記憶SecureStringオブジェクトに格納された廃棄()メソッドを呼び出します。