WPF, ListBox's ItemTemplate has CheckBox, but CheckBox does not seem to be the item
I just wanted the CheckListBox I used to use with Windows Forms.
<ListBox>
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding Name}"/>
</DataTemplate>
</ListBox.ItemTemplate>
At first this seemed to work, but there was numerous problems. In short, it just works like a CheckBox is floating on the real item, rather than the CheckBox is the item.
I mean, (1)clicking the checkbox's text would not select the ListBox item, (2)pressing up and down key does not focus the checkbox. I have to click the checkbox in order to focus it. I have searched Google for solutions but there weren't clean solutions. Am I wanting too much?
I 开发者_如何学编程just want the behavour of CheckedListBox...
I worked around (1) by handling the PreviewMouseDown event of the checkbox and manually selecting the item. It does not seem to be clean.
This is, because your CheckBox
is in a ListBox
. It is handled as an item of the list with all it's features.
If you want to build only a list of checkboxes and don't need selection-logic of the list, use an ItemsControl instead of the ListBox
. The usage is equal. If you want to have your CheckboxList scrollable, use ScrollViewer to wrap the ItemsControl.
<ScrollViewer>
<ItemsControl ItemsSource="{Binding YourItemsCollection">
<ItemsControl.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding Name}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControls>
</ScrollViewer>
Selected answer for the linked question (WPF ListBoxItem selection problem) provides a clean solution! Was stuck with the same scenario -> found your question -> found the other one with the remedy. HTH!
精彩评论