こんにちは、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
This post first appeared on MSDN Blogs | Get The Latest Information, Insights, Announcements, And News From Microsoft Experts And Developers In The MSDN Blogs., please read the originial post: here