我只想要用于Windows Forms的CheckListBox。
<ListBox>
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding Name}"/>
</DataTemplate>
</ListBox.ItemTemplate>
起初这似乎有效,但有很多问题。简而言之,它就像CheckBox漂浮在真实项目上,而不是CheckBox是项目。
我的意思是,(1)单击复选框的文本将不会选择ListBox项目,(2)按向上和向下键不会聚焦复选框。我必须单击复选框才能聚焦它。我搜索过谷歌的解决方案,但没有清洁解决方案。我想要太多了吗?
我只想要CheckedListBox的行为......
我通过处理复选框的PreviewMouseDown事件并手动选择项目来解决(1)问题。它看起来并不干净。
答案 0 :(得分:9)
这是因为您的CheckBox
位于ListBox
。它作为列表中的项目处理,具有所有功能。
如果您只想构建一个复选框列表而不需要列表的选择逻辑,请使用ItemsControl代替ListBox
。用法是平等的。如果您想让CheckboxList可滚动,请使用ScrollViewer包装ItemsControl。
<ScrollViewer>
<ItemsControl ItemsSource="{Binding YourItemsCollection">
<ItemsControl.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding Name}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControls>
</ScrollViewer>
答案 1 :(得分:0)
链接问题(WPF ListBoxItem selection problem)的选定答案提供了一个干净的解决方案!陷入了同样的情况 - &gt;找到了你的问题 - &gt;找到另一个补救措施。 HTH!