123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- namespace System.Windows.Forms
- {
- public partial class CheckedListBox : ListBox
- {
- private static string template =
- "<DataTemplate xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'>" +
- "<StackPanel Orientation=\"Horizontal\">" +
- "<CheckBox IsChecked = \"{Binding IsChecked}\"/>" +
- "<TextBlock Text=\"{Binding Value}\" Margin=\"2,0,0,0\" IsHitTestVisible=\"False\"/>" +
- "</StackPanel>" +
- "</DataTemplate>";
- private static System.Windows.DataTemplate dataTemplate = (System.Windows.DataTemplate)System.Windows.Markup.XamlReader.Parse(template);
- public new ObjectCollection Items { get; }
- public new object SelectedItem
- {
- get => SelectedIndex == -1 ? null : Items[SelectedIndex];
- set => SelectedIndex = Items.IndexOf(value);
- }
- private CheckedItemCollection checkedItems;
- public CheckedItemCollection CheckedItems
- {
- get
- {
- if (checkedItems == null)
- BuildCheckedItems();
- return checkedItems;
- }
- }
- private CheckedIndexCollection checkedIndices;
- public CheckedIndexCollection CheckedIndices
- {
- get
- {
- if (checkedIndices == null)
- BuildCheckedIndices();
- return checkedIndices;
- }
- }
- public bool CheckOnClick { get; set; } // TODO?
- public event ItemCheckEventHandler ItemCheck;
- private void BuildCheckedItems()
- {
- checkedItems = new CheckedItemCollection();
- for (int i = 0; i < control.Items.Count; i++)
- {
- var item = control.Items[i] as Item;
- if (item.IsChecked == true)
- checkedItems.Add(item);
- }
- }
- private void BuildCheckedIndices()
- {
- checkedIndices = new CheckedIndexCollection();
- for (int i = 0; i < control.Items.Count; i++)
- {
- var item = control.Items[i] as Item;
- if (item.IsChecked == true)
- checkedIndices.Add(i);
- }
- }
- private void ClearCheckedItems()
- {
- checkedItems = null;
- checkedIndices = null;
- }
- protected internal override object GetItem(int index) => Items[index];
- protected virtual void OnItemCheck(ItemCheckEventArgs args)
- {
- ClearCheckedItems();
- ItemCheck?.Invoke(this, args);
- }
- public void SetItemCheckState(int index, CheckState value)
- {
- ((Item)control.Items[index]).SetState(value);
- }
- public void SetItemChecked(int index, bool value)
- {
- SetItemCheckState(index, value ? CheckState.Checked : CheckState.Unchecked);
- }
- public CheckedListBox()
- {
- control.ItemTemplate = dataTemplate;
- Items = new ObjectCollection(this, control.Items);
- }
- }
- }
|