ListBox中的ListBox - 选择行为

时间:2012-12-17 16:45:30

标签: c# wpf listbox

List我存储了几个带有标题和子项目的项目

_categories = new List<Category>();

Category cOne = new Category() { Header = "Category one" };
cOne.AddItem("Sub One");
cOne.AddItem("Sub Two");
cOne.AddItem("Sub Three");
_categories.Add(cOne);

在WPF中,我将这些项绑定到ListBox

<ListBox x:Name="listbox">
  <ListBox.ItemTemplate>
    <DataTemplate>
      <StackPanel>
        <TextBlock Text="{Binding Header}" />
        <ListBox ItemsSource="{Binding Subs}" Padding="10 0 0 0" />
      </StackPanel>
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

我现在尝试但失败的是只使内部ListBox点击的项目,即避免:

enter image description here

如果我将TextBlock.IsEnabledTextBlock.IsHitTestVisible设为false,则无法更改。如果StackPanel's属性设置为false,则内部ListBox不再可点击,但有趣的是TextBlock仍然存在。外部ListBox's属性可以防止点击任何内容。

如果外部ListBoxListView,则行为相同。

我还没想出我需要更改的内容,以确保只启用内部列表中的项目。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

如果无需选择外部ListBox中的项目,请不要使用ListBox - 请改为使用ItemsControl

<ItemsControl x:Name="itemsControl">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <TextBlock Text="{Binding Header}" />
                <ListBox ItemsSource="{Binding Subs}" Padding="10 0 0 0" />
            </StackPanel>
        </DataTemplate>
  </ItemsControl.ItemTemplate>
</ItemsControl >