如何阻止用户选择列表框中的项目而不禁用它

时间:2014-01-06 18:47:08

标签: c# wpf xaml listbox

我需要做的事情,在WPF中列出一些东西,但我不希望用户点击列表,列表框没有禁用选择的属性。你可以禁用控件,但这不是我需要的,因为它与样式混淆并使文本难以阅读。我的意思是有类似的东西:

<ListBox IsEnabled="{Binding IsValid}" ...> ... </ListBox>

我想知道是否有类似的东西:

<ListBox Selection="Disabled" ...> ... </ListBox>

或者是否存在列出与列表框不同的项目的替代方案

问题是,有没有办法在WPF中列出内容并且用户无法选择这些项目?

2 个答案:

答案 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您可以选​​择性地选择项目。