2010年06月16日
川俣晶の縁側ソフトウェア技術雑記 total 5514 count

WPFのリストボックスの奇妙な動作

Written By: 川俣 晶連絡先

 偶然に遭遇した現象です。

 SelecttionModeがSingleであるのに、マウスでクリックすると全ての項目が選択でき、解除できなくなります。

再現手順 §

  1. Visual Studio 2010でWPFアプリケーションを作成する
  2. フォーム上にリストボックスを1つ貼り付ける
  3. メインフォームをダブルクリックしてWindow_Loadedイベントのハンドラを作成する
  4. ハンドラにlistBox1.Items.Add("Test Data");を2回を書き込む
  5. 実行してリストボックスの項目を順次クリックする

原因と対策 §

 原因は、おそらくWPFのリストボックスが文字列以外にも使用できる汎用であり、重複するアイテムの追加を想定していないためでしょう。だから、同じアイテムが違うと判定できていないのでしょう。

 "Test Data"+""と記述する程度では違うインスタンスになりません。listBox1.Items.Add(new StringBuilder("Test Data"));とすれば意図通りに動作しました。しかし、listBox1.Items.Add(new StringBuilder("Test Data").Append("").ToString());のようなコードを書いてもダメでした。結局同じものしか戻って来ないようです。

余談 §

 おそらく、このあたりに書かれている問題と同じです。