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.
总而言之,我需要:
- 阻止用户 select 子列表框上的项目。
- 当我们单击 ItemTemplate 区域中的任意位置时(即使单击子列表框),父列表框上的项目应该 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.
的简单方法
我有一个带有以下 ItemTemplate 的列表框:
<DataTemplate>
<StackPanel>
<TextBlock .... />
<ListBox .... />
</StackPanel>
</DataTemplate>
我想禁止用户 Select 子 ListBox 中的项目,并且当用户单击子 ListBox 时,应分别设置父 ListBox SelectedItem。
我试过的是将子 ListBox 的 IsHitTestVisible 设置为 false,这样可以防止用户 select 上面的项目,但问题是如果我点击子 ListBox,鼠标点击不会传递给父 ListBoxItem,因此它永远不会 selected.
总而言之,我需要:
- 阻止用户 select 子列表框上的项目。
- 当我们单击 ItemTemplate 区域中的任意位置时(即使单击子列表框),父列表框上的项目应该 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.
的简单方法