WPF,ListBox的ItemTemplate有CheckBox,但是CheckBox好像不是item

标签 wpf listbox keyboard focus checkedlistbox

我只想要我曾经与 Windows 窗体一起使用的 CheckListBox。

    <ListBox>
        <ListBox.ItemTemplate>
            <DataTemplate>
                <CheckBox  Content="{Binding Name}"/>
            </DataTemplate>
        </ListBox.ItemTemplate>

起初这似乎有效,但有很多问题。简而言之,它就像一个 CheckBox float 在真实项目上,而不是 CheckBox 是项目。

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

我只想要 CheckedListBox 的行为...

我通过处理复选框的 PreviewMouseDown 事件并手动选择项目来解决 (1)。好像不干净。

最佳答案

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

如果您只想构建一个复选框列表并且不需要列表的选择逻辑,请使用 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/

相关文章:

android - 如何在android EditText中强制使用英文键盘

c# - 两种方式绑定(bind)到用户控件中的依赖属性并调用方法

c# - 通过代码选择多个列表框项

c# - 使用列表框进行数据绑定(bind)

c# - 如何在列表框上实现增量搜索?

linux - 如何使用输入子系统在 Linux 上使用键盘事件

c# - LibTiff.NET Tiff 到 WPF 图像

C# WPF 应用程序在 Visual 中启动,但直接运行时无法启动

c# - 错误 CS2012 : Cannot open <executable path> access to <executable path denied>

ios - 在后台点击时隐藏键盘 - 手势引用问题