というような現象に出くわしました。 サンプルコードの一部を載せます。完全なコードは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)); }
分類:[.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以上に難しくてよくわかりません・・・