2009-07-11 8 views
2

J'ai un ListBox avec ListBoxItem s qui contient un ListBox imbriqué. Maintenant, je veux que les objets de haut niveau de ListBox n'aient pas d'arrière-plan bleu alors ils sont sélectionnés (voir image).Styling ListBoxItem de ListBoxes imbriquées [WPF]

Example Image http://img43.imageshack.us/img43/237/window1.png

J'ai essayé d'utiliser le XAML ci-dessous avec un style pour changer la couleur d'arrière-plan transparent décrivaient dans ce blog post. Cela fonctionne, mais il modifie également la couleur d'arrière-plan sélectionnée des éléments dans les ListBox imbriqués. Comment puis-je le modifier pour ne l'appliquer qu'aux éléments de niveau supérieur?

<Window x:Class="WpfTest.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="350" Width="352"> 
    <Grid> 
     <Grid.Resources> 
      <DataTemplate x:Key="SampleItemTemplate"> 
       <Border Margin="5" Background="Gray" CornerRadius="3"> 
        <Border.BitmapEffect> 
         <DropShadowBitmapEffect/> 
        </Border.BitmapEffect> 
        <StackPanel Margin="2"> 
         <TextBlock Text="{Binding Path=Lid, StringFormat='ProvID: {0}'}"/> 
         <ListBox ItemsSource="{Binding Path=TestOrders}"/> 
        </StackPanel> 
       </Border> 
      </DataTemplate> 
     </Grid.Resources> 
     <Button Height="23" Name="button1" VerticalAlignment="Bottom" HorizontalAlignment="Right" Width="75" Margin="0,0,12,12" Click="button1_Click">Button</Button> 
     <ListBox Name="listBox1" Margin="12,12,12,41" ItemsSource="{Binding}" ItemTemplate="{StaticResource SampleItemTemplate}"> 
      <ListBox.Resources> 
      <Style TargetType="{x:Type ListBoxItem}"> 
       <Style.Resources> 
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/> 
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent"/> 
       </Style.Resources> 
      </Style> 
      </ListBox.Resources> 
     </ListBox> 
    </Grid> 
</Window> 

Je comprends que ce style applique à tous les objets de type ListBoxItem, mais comment puis-je à appliquer seulement aux articles en listbox1? Probablement il ya une meilleure façon d'accomplir ce que je veux, dans ce cas, s'il vous plaît dites-moi!

Répondre

2

Avez-vous besoin des éléments "intérieur" et "extérieur" pour être sélectionnables? Je voudrais probablement coller avec ItemsControl pour la liste externe et laisser simplement les éléments internes être sélectionnables. Vous pouvez ensuite lister ListBoxItem sans affecter les éléments "externes".

1

Je suis d'accord avec Matt (ressemble, vous pouvez juste coller un ItemsControl dans un ScrollViewer pour la liste principale), mais vous pouvez également réinitialiser les couleurs à leurs valeurs par défaut à l'intérieur du champ de l'enfant ListBox es:

<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="{x:Static SystemColors.HighlightBrush}"/> 
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="{x:Static SystemColors.ControlBrush}"/>