2012-12-17 71 views
1

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假沒有什麼變化。如果StackPanel's屬性設置爲false,則內部ListBox不再可點擊,但有趣的是TextBlock仍然是可以點擊的。而外部的ListBox's屬性阻止點擊任何東西。

如果外層ListBox改爲ListView,則行爲相同。

我還沒有想出什麼,我需要改變,以確保只有在內部列表中的項目啓用。有任何想法嗎?

+0

的評論@HighCore感謝。最後,這與使用IsEnabled具有相同的效果。 – Em1

+0

您是否嘗試過使用'ItemsControl'作爲外部列表? – Niki

回答

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 > 
+0

那麼,起初我認爲你是對的,但它根本不會改變任何東西。 – Em1

+2

你可能是指'ItemsControl'。 'ListView'是'Selector'的後代,所以它是用來選擇項目的。 – Niki

+0

@nikie你當然是對的。我搞砸了。感謝您指出了這一點!給自己留言:想想 - 再想一想 - 寫。 – Spontifixus