我需要做的事情,在WPF中列出一些东西,但我不希望用户点击列表,列表框没有禁用选择的属性。你可以禁用控件,但这不是我需要的,因为它与样式混淆并使文本难以阅读。我的意思是有类似的东西:
<ListBox IsEnabled="{Binding IsValid}" ...> ... </ListBox>
我想知道是否有类似的东西:
<ListBox Selection="Disabled" ...> ... </ListBox>
或者是否存在列出与列表框不同的项目的替代方案
问题是,有没有办法在WPF中列出内容并且用户无法选择这些项目?
答案 0 :(得分:3)
使用ItemsControl代替ListBox
。 ItemsControl是lookless control。
但是对于ItemsControl ,虚拟化不受支持(默认情况下),您必须进行一些更改以支持虚拟化(以防)。
如果您想在此处支持虚拟化,请参阅此内容 - Virtualizing an ItemsControl.
您可以在 ListBoxItem 上将IsHitTestVisible设置为false
,这会禁止任何鼠标输入。您可以使用 ItemContainerStyle 设置它。
<ListBox>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="IsHitTestVisible" Value="False"/>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
答案 1 :(得分:0)
使用MVVM模式,您的ViewModel
应该跟踪SelectedItems
。您可以将其绑定到ListBox.SelectedItems
属性,以使其保持同步。
您可以让ViewModel
控制用于选择项目的验证逻辑。 ListBox.SelectionChanged
事件可以与模型中的属性相关联,例如CanSelect
您可以选择性地选择项目。