开发者

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!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜