【发布时间】:2011-03-10 12:37:10
【问题描述】:
我有一个列表框,它的项目模板有一个复选框。 现在,当我单击列表框中的复选框时,它会设置复选框的选中状态。如果我使用键盘“空格”键,我无法更改复选框状态。
注意:当我通过单击复选框将焦点设置为复选框后,键盘是快捷方式。
【问题讨论】:
标签: wpf listbox checkbox focus
我有一个列表框,它的项目模板有一个复选框。 现在,当我单击列表框中的复选框时,它会设置复选框的选中状态。如果我使用键盘“空格”键,我无法更改复选框状态。
注意:当我通过单击复选框将焦点设置为复选框后,键盘是快捷方式。
【问题讨论】:
标签: wpf listbox checkbox focus
如果您根本不希望 ListBox 提供选择,您可以使用普通的 ItemsControl 而不是 ListBox:
<ItemsControl ItemsSource="{Binding}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
然后,您将只拥有一系列 CheckBox,而无需使用将获取键盘焦点的 ListBoxItem 控件包装它们。
另一方面,如果您希望 ListBox 显示选择,那么您可能需要一个多选 ListBox,其中 CheckBox 的状态绑定到 ListBoxItem 的选定状态。由于单击 ListBoxItem 将检查 CheckBox,因此您可以完全阻止 CheckBox 获得焦点:
<ListBox ItemsSource="{Binding}" SelectionMode="Multiple">
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox
Content="{Binding}"
Focusable="False"
IsChecked="{Binding IsSelected, RelativeSource=
{RelativeSource AncestorType={x:Type ListBoxItem}}}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
【讨论】: