Dre*_*kes 257

方法1 - ItemsControl

除非您需要其他方面,否则您ListBox可以使用ItemsControl.它将物品放入ItemsPanel并且没有选择的概念.

<ItemsControl ItemsSource="{Binding MyItems}" />
Run Code Online (Sandbox Code Playgroud)

默认情况下,ItemsControl不支持其子元素的虚拟化.如果您有很多项目,虚拟化可以减少内存使用并提高性能,在这种情况下,您可以使用方法2并设置样式ListBox,或者为您的虚拟化添加虚拟化ItemsControl.

方法2 - 造型 ListBox

或者,只需设置ListBox的样式,使选择不可见.

<ListBox.Resources>
  <Style TargetType="ListBoxItem">
    <Style.Resources>
      <!-- SelectedItem with focus -->
      <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}"
                       Color="Transparent" />
      <!-- SelectedItem without focus -->
      <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}"
                       Color="Transparent" />
      <!-- SelectedItem text foreground -->
      <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}"
                       Color="Black" />
    </Style.Resources>
    <Setter Property="FocusVisualStyle" Value="{x:Null}" />
  </Style>
</ListBox.Resources>
Run Code Online (Sandbox Code Playgroud)

  • 不,它只会改变视觉效果,而不会改变实际的选择行为 (24认同)
  • 我的第一个建议是使用ItemsControl.你错过了吗?:) (7认同)
  • 重新阅读这些评论我想指出@Thomas Levesque的评论只适用于我展示的第二种方法.使用普通的`ItemsControl`将完全删除任何选择的概念. (5认同)
  • +1 方法 1 - ItemsControl。如果我们有一个必须滚动的大页面,如果用户将鼠标悬停在 ListBox 上,它会在列表框抓取 MouseWheel 事件时有效地禁用 MouseWheel。这意味着用户会因为用于滚动整个页面的鼠标滚轮随机停止工作而感到沮丧,这取决于鼠标是否在列表框上。 (2认同)

Asa*_*ani 149

我找到了一个非常简单直接的解决方案,我希望它能帮到你

<ListBox ItemsSource="{Items}">
    <ListBox.ItemContainerStyle>
       <Style TargetType="{x:Type ListBoxItem}">
           <Setter Property="Focusable" Value="False"/>
       </Style>
    </ListBox.ItemContainerStyle>
</ListBox>
Run Code Online (Sandbox Code Playgroud)

  • 添加此附加属性以删除鼠标悬停突出显示:`&lt;Setter Property="IsHitTestVisible" Value="False" /&gt;` (5认同)
  • 太棒了.它会阻止所选项目和其他控件如按钮仍然有效.正是我在寻找的东西 (3认同)

Wil*_*lka 25

您可以切换到使用ItemsControl而不是ListBox.一个ItemsControl没有选择的概念,所以没有什么可关闭.

  • 迷人.我从来不知道你可以直接宣告ItemsControl,我认为它是虚拟的(MustOverride),谢谢! (2认同)
  • 这最终会失去太多功能 - 例如,滚动. (2认同)

Cal*_*ear 12

另一个值得考虑的选择是禁用ListBoxItems.这可以通过设置ItemContainerStyle来完成,如下面的代码片段所示.

<ListBox ItemsSource="{Binding YourCollection}">
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="IsEnabled" Value="False" />
        </Style>
    </ListBox.ItemContainerStyle>
</ListBox>
Run Code Online (Sandbox Code Playgroud)

如果您不希望文本为灰色,则可以通过使用以下键向样式的资源添加画笔来指定禁用的颜色:{x:Static SystemColors.GrayTextBrushKey}.另一种解决方案是覆盖ListBoxItem控件模板.


And*_*elj 7

这也可以,如果我需要使用listbox而不是itemscontrol,但我只是显示了不应该选择的项目,我使用:

<ListBox.ItemContainerStyle>
    <Style TargetType="ListBoxItem">
        <Setter Property="IsHitTestVisible" Value="False" />
    </Style>
</ListBox.ItemContainerStyle>
Run Code Online (Sandbox Code Playgroud)