ListBoxItem 模板中的 ListBox

ListBox inside a ListBoxItem template

我有一个带有以下 ItemTemplate 的列表框:

<DataTemplate>
  <StackPanel>
    <TextBlock .... />
    <ListBox .... />
  </StackPanel>
</DataTemplate>

我想禁止用户 Select 子 ListBox 中的项目,并且当用户单击子 ListBox 时,应分别设置父 ListBox SelectedItem。

我试过的是将子 ListBox 的 IsHitTestVisible 设置为 false,这样可以防止用户 select 上面的项目,但问题是如果我点击子 ListBox,鼠标点击不会传递给父 ListBoxItem,因此它永远不会 selected.

总而言之,我需要:

您可以将内部 ListBox 替换为 ItemsControl。根据您的问题,听起来您只需要显示一个集合,并阻止用户与之交互。一个简单的 ItemsControl 非常适合。 ItemsControl 不支持选择,因此点击将传播到您的主 ListBox

编辑

根据您的评论,我建议您尝试以下两个选项之一。首先,您可以将列表框项目的 IsHitTestVisible 设置为 false,如下例所示

<!-- XAML for the inner list box -->
<ListBox>
    <ListBox.Resources>
       <Style TargetType="{x:Type ListBoxItem}">
          <Setter Property="IsHitTestVisible" Value="False" />
       </Style>
    </ListBox.Resources>
</ListBox>

这将导致点击事件向上传播到您的主列表框,同时仍然能够使用列表框。

其次,也许只创建两个单独的列表框会更容易?同样,您还没有完全解释为什么需要这样做,但是尝试加载具有不同功能模式的控件有时会使事情变得过于复杂。拥有两个控件,并且根据某些条件一次只显示一个控件,可以是简化 XAML.

的简单方法