我只想要我曾经与 Windows 窗体一起使用的 CheckListBox。
<ListBox>
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding Name}"/>
</DataTemplate>
</ListBox.ItemTemplate>
起初这似乎有效,但有很多问题。简而言之,它就像一个 CheckBox float 在真实项目上,而不是 CheckBox 是项目。
我的意思是,(1)单击复选框的文本不会选择 ListBox 项,(2)按上下键不会聚焦复选框。我必须单击复选框才能聚焦它。我在谷歌上搜索了解决方案,但没有干净的解决方案。是我想要的太多了吗?
我只想要 CheckedListBox 的行为...
我通过处理复选框的 PreviewMouseDown 事件并手动选择项目来解决 (1)。好像不干净。
最佳答案
这是因为您的 CheckBox
在 ListBox
.它作为列表中的一个项目处理,具有它的所有功能。
如果您只想构建一个复选框列表并且不需要列表的选择逻辑,请使用 ItemsControl而不是 ListBox
.用法是平等的。如果您想让 CheckboxList 可滚动,请使用 ScrollViewer 包装 ItemsControl。
<ScrollViewer>
<ItemsControl ItemsSource="{Binding YourItemsCollection">
<ItemsControl.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding Name}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControls>
</ScrollViewer>
关于WPF,ListBox的ItemTemplate有CheckBox,但是CheckBox好像不是item,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5901665/