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

时间:2011-05-05 17:16:14

标签: wpf listbox keyboard focus checkedlistbox

我只想要用于Windows Forms的CheckListBox。

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

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

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

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

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

2 个答案:

答案 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!