我有一个带有以下ItemTemplate的ListBox:
<DataTemplate>
<StackPanel>
<TextBlock .... />
<ListBox .... />
</StackPanel>
</DataTemplate>
我想禁止用户选择子ListBox中的项目,当用户点击子ListBox时,应分别设置父ListBox SelectedItem。
我所尝试的是将子ListBox的IsHitTestVisible设置为false,这会阻止用户在其上选择一个项目,但问题是如果我单击子ListBox,则鼠标单击不会传递给父ListBoxItem,因此永远不会被选中。
总而言之,我需要:
答案 0 :(得分:1)
您可以使用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。