WPF,ListBox的ItemTemplate有CheckBox,但CheckBox似乎不是项目

Dam*_*les 7 keyboard wpf listbox focus checkedlistbox

我只是想要用于Windows Forms的CheckListBox.

    <ListBox>
        <ListBox.ItemTemplate>
            <DataTemplate>
                <CheckBox  Content="{Binding Name}"/>
            </DataTemplate>
        </ListBox.ItemTemplate>
Run Code Online (Sandbox Code Playgroud)

起初这似乎有效,但存在许多问题.简而言之,它就像CheckBox漂浮在真实项目上,而不是CheckBox是项目.

我的意思是,(1)单击复选框的文本将不会选择ListBox项目,(2)按向上和向下键不会聚焦复选框.我必须单击复选框才能聚焦它.我搜索过谷歌的解决方案,但没有干净的解决方案.我想要太多了吗?

我只想要CheckedListBox的行为......

我通过处理复选框的PreviewMouseDown事件并手动选择项目来解决(1)问题.它看起来不干净.

HCL*_*HCL 9

这是因为你CheckBoxListBox.它作为列表中的项目处理,具有所有功能.

如果您只想构建一个复选框列表而不需要列表的选择逻辑,请使用ItemsControl而不是ListBox.用法是平等的.如果要使CheckboxList可滚动,请使用ScrollViewer包装ItemsControl.

<ScrollViewer>
   <ItemsControl ItemsSource="{Binding YourItemsCollection">
      <ItemsControl.ItemTemplate>    
          <DataTemplate>                
             <CheckBox  Content="{Binding Name}"/>
          </DataTemplate>
      </ItemsControl.ItemTemplate>
   </ItemsControls>
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)