[C# WPF] コードビハインドからListBoxの要素を複数選択する
2019年4月18日
たまに使うと忘れているので書いておきます。
何も考えずにListBox.SelectedItemを更新してしまうと既に選択してあった項目の選択状態も解除されてしまいます。
もくじ
スポンサーリンク
サンプルコード
例えば、XAMLで以下のようにListBoxを宣言しているとします。
<ListBox x:Name="xListBox" SelectionMode="Multiple">
<ListBoxItem Content="aaa" IsSelected="True"/>
<ListBoxItem Content="bbb"/>
<ListBoxItem Content="ccc"/>
<ListBoxItem Content="ddd"/>
<ListBoxItem Content="eee"/>
</ListBox>
この場合、コードビハインドでは以下の方法で複数選択ができます。
// その1 xListBox.SelectedItems.Add(xListBox.Items[2]); // その2 var item = xListBox.Items[3] as ListBoxItem; item.IsSelected = true; // その3 // ListBoxの要素がDependencyObjectの場合にはこちらも使えます. // ListBoxItemはDependencyObjectです. Selector.SetIsSelected((DependencyObject)xListBox.Items[4], true);
また、以下のようにListBox.ItemsSourceにDependencyObject以外のオブジェクトのリストを設定している場合には、上記の「その1」の方法で設定します。
xListBox.ItemsSource = new List<string> { "aaa", "bbb", "ccc" };
// OK
xListBox.SelectedItems.Add(xListBox.Items[0]);
// NG (自動的にListBoxItemにはならないので、asはnullを返す)
var item = xListBox.Items[1] as ListBoxItem;
// NG (stringはDependencyObjectではないので、castに失敗する)
Selector.SetIsSelected((DependencyObject)xListBox.Items[2], true);
おしまい。
スポンサーリンク
関連記事

[C# WPF] なんとかしてWPFの描画を速くしたい「直線描画 」
最近WPFのパフォーマンスチューニングに勤しんでいます。 300,000個ほどの ...

.NET Core 3.0でWPFを試してみた
いまさら感は気にせずにまとめます。 インストール まずはVisual Studi ...

[C#] Wave波形を読み込むよ
Wave波形を読み込んで描画したくなることが年に1回くらいあります。毎回忘れてい ...

[C# WPF] テキストのサイズを算出する
まずは手順から。WPFで文字列のサイズを取得する方法です。 XAML側 < ...

[C# WPF] 多言語対応がうまくいかないのでハイパーリンクを自作した
.NETにはHyperlinkクラスがありますが、NavigateUriに設定す ...


ディスカッション
コメント一覧
まだ、コメントがありません