locked
TextBoxで読み取り専用(IsReadOnly="True")のとき、文字を選択して日本語入力すると該当部分が消える RRS feed

  • 質問

  • 皆さんこんにちは。Silverlight2での開発をしているのですが
    以下の現象について、どなたかシンプルな解決策をお持ちでしたら、教えていただけませんでしょうか?

    (現象)
    TextBoxコントロールでIsReadOnly="True"の状態で配置します。
    既に入力されている文字は、選択できても書き換えることはできないはずですが
    文字を選択し、IMEオンの状態で日本語入力しますと、入力確定した時点で、元の選択していた文字は消えてしまいます。

    単に解決するのであれば、TextChangedイベントを取って、文字を上書きすれば良いのですが
    使用しているTextBoxコントロールの数が多く、できるだけシンプルに対処できればと思います

    どうかお知恵をお貸し下さい。
    よろしくお願いいたします。
    2009年5月25日 7:42

回答

  • 私もSL2でこの問題に悩まされましたが、
    以下の方法で解決致しました。

    1:xamlのほうで、各TextBoxコントロールに「IsTabStop="False"」を追加します(タブキーで遷移しないようにします)
    ここから少々面倒かも知れませんが…
    2:TextBoxを完全に覆うようにRectangleコントロールを置きます。
    3:xamlのほうで、配置したRectangleに「Opacity="0"」を設定します。

    3の手順でコントロールが散在し、あちらこちらにある場合は少々面倒ですが、固まっている場合などは一気に覆えるので有用かもしません。

    もし、ログオンユーザによって切り替えたい場合は…例えば3のRectangleに対して「RectangleHide」というIDを割り当て、
    コードビハインド側(xaml.cs)で
    if( xx==yy)
    {
         RectangleHide.Margin=hoge;(ご存知とは思いますがhogeにはマージンの値が入ります)
    }
    という制御も使えるかと思います。

    あと…余談になりますが、SL2 BetaでのデザインとSL2 RTWでのデザインを比較すると、
    若干Marginにズレがありますので、ご注意下さい。

    • 回答としてマーク すがっと 2009年5月27日 11:48
    2009年5月26日 5:40

すべての返信

  • これのことかな?
    対策・回避策までは言及されていませんが…。
    http://social.msdn.microsoft.com/Forums/ja-JP/silvelightdotnetja/thread/ece7afe1-7a04-4a69-8332-c994ed371922

    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年5月25日 21:51
  • 私もSL2でこの問題に悩まされましたが、
    以下の方法で解決致しました。

    1:xamlのほうで、各TextBoxコントロールに「IsTabStop="False"」を追加します(タブキーで遷移しないようにします)
    ここから少々面倒かも知れませんが…
    2:TextBoxを完全に覆うようにRectangleコントロールを置きます。
    3:xamlのほうで、配置したRectangleに「Opacity="0"」を設定します。

    3の手順でコントロールが散在し、あちらこちらにある場合は少々面倒ですが、固まっている場合などは一気に覆えるので有用かもしません。

    もし、ログオンユーザによって切り替えたい場合は…例えば3のRectangleに対して「RectangleHide」というIDを割り当て、
    コードビハインド側(xaml.cs)で
    if( xx==yy)
    {
         RectangleHide.Margin=hoge;(ご存知とは思いますがhogeにはマージンの値が入ります)
    }
    という制御も使えるかと思います。

    あと…余談になりますが、SL2 BetaでのデザインとSL2 RTWでのデザインを比較すると、
    若干Marginにズレがありますので、ご注意下さい。

    • 回答としてマーク すがっと 2009年5月27日 11:48
    2009年5月26日 5:40
  • 返信有り難うございます。

    >Azuleanさま
    はい。この現象のことです。この投稿があったとは見落としていました。
    Silverlight3で治ることを祈ります。

    >jun-fさま
    なるほど。文字選択をIsTabStopとRectangleで封じてしまうんですね。
    参考になります!

    2009年5月27日 11:33
  • すがっと様、Azulean様

    残念ながらSilverlight3 Beta1では引き続き再現するようですね…
    Beta2か正式版に期待となります。

    う~ん…1年ほど前にBeta2で実装したときにMSとやり取りを行っていて、
    そこで現象を指摘したはずなんですがね~。

    実際Opacity=0にしたとはいえ、ビルド上はもう1個コントロールが増えるわけですから…
    容量、重さとかはコーディング手法もそうですが、コントロールの数にも比例するはずなので
    例えば本当に複雑に色々絡み合った画面の場合、都度こんな対応していたらパフォーマンスの劣化が懸念されます…
    (幸い私のところは1つでしたけど)
    2009年5月28日 0:31