DOBON.NET DOBON.NETプログラミング掲示板過去ログ

[WPF]ListBoxでの順番の上下

  • 題名: [WPF]ListBoxでの順番の上下
  • 著者: ryo_ta
  • 日時: 2011/03/14 16:04:09
  • ID: 28314
  • この記事の返信元:
    • (なし)
  • この記事への返信:
    • (なし)
  • ツリーを表示
環境/言語:[WPF/C#/VS2010/.NET 4.0/win7]
分類:[.NET]

リストの順番を編集するUIを作りたいのですが
(上下の矢印ボタンで順番を入れ替えていく)
WPFのListBoxで実装したところ、

1.選択したアイテムは背景色が変わる

2.矢印ボタンで移動させると以前の位置のアイテムの色も変わっている

3.この操作で変わってしまった背景色はクリックしても色が戻らないが、アイテムを左クリックしながら動かすと、元に戻っている

というような現象に出くわしました。
サンプルコードの一部を載せます。完全なコードはzipで添付しています。
public partial class MainWindow : Window
{
private ObservableCollection<string> items = new ObservableCollection<string>();

public MainWindow()
{
InitializeComponent();

for (int i = 0; i < 5; ++i)
{
items.Add("アイテム" + Convert.ToString(i));
}

this.listBox1.ItemsSource = this.items;
}

private void button_Up_Click(object sender, RoutedEventArgs e)
{
int pos = this.listBox1.SelectedIndex;
if (pos < (0 + 1) || (this.listBox1.Items.Count - 1) < pos)
return;

string tmp = this.items[pos - 1];
this.items[pos - 1] = this.items[pos];
this.items[pos] = tmp;
this.listBox1.SelectedIndex = pos - 1;
}

private void button_Down_Click(object sender, RoutedEventArgs e)
{
int pos = this.listBox1.SelectedIndex;
if (pos < 0 || (this.listBox1.Items.Count - 1) <= pos)
return;

string tmp = this.items[pos + 1];
this.items[pos + 1] = this.items[pos];
this.items[pos] = tmp;
this.listBox1.SelectedIndex = pos + 1;
}
}

期待する動作としては、背景色が変わっているのは選択している
アイテムだけであって欲しいのですがXAMLに不慣れで実現方法がわからず困っています。
イベントハンドラ側からコードでStyleをセットしてやればできそうな気がしますが
コード中でのスタイル定義はXAML以上に難しくてよくわかりません・・・
添付ファイル: WpfTestApplication.zip (9 KB)

DOBON.NET | プログラミング道 | プログラミング掲示板