2010-12-10 18 views
2

J'ai un ListBox. Il a un fond blanc. Comment puis-je m'en débarrasser?Silverlight: Rendre l'arrière-plan de liste déroulante transparent?

Voici le XAML que j'essaie. Quoi que je fasse, je ne peux pas me débarrasser de ce contexte. (Je ne suis pas sûr que ce soit sur chaque point, ce qui arrive à prendre tout l'espace dans le ListBox, ou si elle est sur le fond de l'ListBox lui-même.)

<ListBox x:Name="topThreeHits" ItemsSource="{Binding TopThreeHits}" Margin="0,10,0,0"> 
       <ListBox.ItemContainerStyle> 
        <Style TargetType="ListBoxItem"> 
         <Setter Property="Background" Value="Transparent" /> 
        </Style> 
       </ListBox.ItemContainerStyle> 
       <ListBox.ItemsPanel> 
        <ItemsPanelTemplate> 
         <StackPanel Orientation="Horizontal" Background="Transparent"/> 
        </ItemsPanelTemplate> 
       </ListBox.ItemsPanel> 
       <ListBox.ItemTemplate> 
        <DataTemplate> 
         <StackPanel Margin="10,0" Background="Transparent"> 
          <Image Source="{Binding Image, FallbackValue=/PlumPudding;component/Images/file.png}" /> 
          <TextBlock> 
          <Run Text="{Binding Name, FallbackValue='File Name'}" FontWeight="Bold" /> 
          <Run Text="." Foreground="#787878" FontWeight="Light" /> 
          <Run Text="{Binding TypeExtension, FallbackValue='type'}" Foreground="#787878" FontWeight="Light" /> 
          </TextBlock> 
         </StackPanel> 
        </DataTemplate> 
       </ListBox.ItemTemplate> 
      </ListBox> 

J'utilise Silverlight 4.

Répondre

1

J'ai essayé d'ajouter une bordure autour de la ListBox avec un arrière-plan vert et de mettre l'arrière-plan à Transparent pour votre ListBox et il semble fonctionner correctement.

<Border Background="Green"> 
    <ListBox x:Name="topThreeHits" 
      Background="Transparent" 
      ItemsSource="{Binding Customers}" Margin="0,10,0,0"> 
     <ListBox.ItemContainerStyle> 
      <Style TargetType="ListBoxItem"> 
       <Setter Property="Background" Value="Transparent" /> 
      </Style> 
     </ListBox.ItemContainerStyle> 
     <ListBox.ItemsPanel> 
      <ItemsPanelTemplate> 
       <StackPanel Orientation="Horizontal" Background="Transparent"/> 
      </ItemsPanelTemplate> 
     </ListBox.ItemsPanel> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Margin="10,0" Background="Transparent"> 
        <Image Source="{Binding Image, FallbackValue=/PlumPudding;component/Images/file.png}" /> 
        <TextBlock> 
        <Run Text="{Binding Name, FallbackValue='File Name'}" FontWeight="Bold" /> 
        <Run Text="." Foreground="#787878" FontWeight="Light" /> 
        <Run Text="{Binding TypeExtension, FallbackValue='type'}" Foreground="#787878" FontWeight="Light" /> 
        </TextBlock> 
       </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
</Border> 
3

Votre code fonctionne correctement et définit correctement le style d'arrière-plan. Je suppose ce que vous voulez faire est ébloui par le conteneur d'élément par défaut complètement donc il n'y a pas de fond, y compris les renversements, etc.

La meilleure façon de le faire est comme ceci:

 <ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem"> 
     <Setter Property="Template" > 
      <Setter.Value> 
      <ControlTemplate TargetType="ListBoxItem"> 
       <ContentPresenter Content="{TemplateBinding Content}" /> 
      </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
     </Style> 
    </ListBox.ItemContainerStyle> 
+0

En fait, tout ce que je voulais faire était de supprimer l'arrière-plan. Je voulais garder le roulement. J'ai ajouté le code que vous avez posté au code que j'avais ci-dessus, et maintenant la liaison de données ne fonctionne pas - il est rempli de valeurs de repli par défaut. Je ne suis pas sûr de savoir pourquoi. –

+1

Super, c'est exactement ce que je voulais faire sans avoir à réapprendre toutes les propriétés du listbox. Beaucoup plus simple, merci. –