WPF アプリケーションにおいて文字入力可能なコントロールを無効化した場合の挙動について

こんにちは、Platform SDK (Windows SDK) サポートチームです。

今回は、WPF アプリケーションにおいて、文字入力可能なコントロールの IsEnabled プロパティを False に設定した場合の挙動についてご案内します。

 

現象

WPFのコントロールは、IsEnabled プロパティを False に設定してすることによりそのコントロールを無効化することが可能です。

この場合、マウスやタブ キー等で選択やフォーカスを設定することができなくなり、TextBoxBase クラスから派生した TextBox クラスや ComboBox クラス等の文字入力可能なコントロールでは文字を入力できない状態になります。

しかしながら、テキストを設定してあるコントロールに対して右クリック等によりコンテキスト メニューを表示するとメニューアイテムとして変換候補が含まれますが、この表示された変換候補から選択すると、コントロール内の文字列が選択した文字列に変更されます。

具体的には、以下のスクリーンショットのとおり、TextBox に表示された「TextBox」という文字列が、コンテキスト メニューにある「TextBox」を選択するとその文字列に変更されています。

 

原因

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