こんにちは、Platform SDK (Windows SDK) サポートチームです。
今回は、WPF アプリケーションにおいて、文字入力可能なコントロールの IsEnabled プロパティを False に設定した場合の挙動についてご案内します。
現象
WPFのコントロールは、IsEnabled プロパティを False に設定してすることによりそのコントロールを無効化することが可能です。
この場合、マウスやタブ キー等で選択やフォーカスを設定することができなくなり、TextBoxBase クラスから派生した TextBox クラスや ComboBox クラス等の文字入力可能なコントロールでは文字を入力できない状態になります。
しかしながら、テキストを設定してあるコントロールに対して右クリック等によりコンテキスト メニューを表示するとメニューアイテムとして変換候補が含まれますが、この表示された変換候補から選択すると、コントロール内の文字列が選択した文字列に変更されます。
具体的には、以下のスクリーンショットのとおり、TextBox に表示された「TextBox」という文字列が、コンテキスト メニューにある「TextBox」を選択するとその文字列に変更されています。
Image may be NSFW.
Clik here to view.
↓
Image may be NSFW.
Clik here to view.
原因
WPF では、コントロールの IsEnabled プロパティの状態によらず候補が表示されます。
回避策
コンテキスト メニューの表示は WPF 内で実装しており、IsReadOnly プロパティが True の場合はコンテキスト メニューを表示しません。
このため、IsEnabled プロパティを False に設定するのに加え、IsReadOnly プロパティを True に設定することにより、意図していないコントロール内の文字列編集を防ぐことが可能です。
参考情報
UIElement.IsEnabled プロパティ
https://msdn.microsoft.com/ja-jp/library/system.windows.uielement.isenabled.aspx
TextBoxBase.IsReadOnly プロパティ
https://msdn.microsoft.com/ja-jp/library/system.windows.controls.primitives.textboxbase.isreadonly.aspx