Vous pouvez le faire en personnalisant le modèle de contrôle existant pour un élément ListBox. Pour ce faire, lancez simplement Expression Blend, cliquez avec le bouton droit de la souris sur un objet ListBoxItem, sélectionnez Edit Control Parts (Template) et sélectionnez Edit a Copy ... puis personnalisez la couleur de remplissage des rectangles fillColor et fillColor2 selon les besoins.
Le Xaml ci-dessous la couleur ListBoxItem la souris sur d'être transparent et la couleur sélectionnée pour être vert clair, mais vous pouvez personnaliser ceci à vos besoins:
<UserControl x:Class="SilverlightApplication2.Page"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows"
Width="400" Height="300" Background="#FF000000">
<UserControl.Resources>
<Style x:Key="ListBoxItemStyleTransparent" TargetType="ListBoxItem">
<Setter Property="Padding" Value="3"/>
<Setter Property="HorizontalContentAlignment" Value="Left"/>
<Setter Property="VerticalContentAlignment" Value="Top"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="TabNavigation" Value="Local"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Grid Background="{TemplateBinding Background}">
<vsm:VisualStateManager.VisualStateGroups>
<vsm:VisualStateGroup x:Name="CommonStates">
<vsm:VisualState x:Name="Normal"/>
<vsm:VisualState x:Name="MouseOver">
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="fillColor" Storyboard.TargetProperty="Opacity">
<SplineDoubleKeyFrame KeyTime="0" Value=".35"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</vsm:VisualState>
<vsm:VisualState x:Name="Disabled">
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="contentPresenter" Storyboard.TargetProperty="Opacity">
<SplineDoubleKeyFrame KeyTime="0" Value=".55"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</vsm:VisualState>
</vsm:VisualStateGroup>
<vsm:VisualStateGroup x:Name="SelectionStates">
<vsm:VisualState x:Name="Unselected"/>
<vsm:VisualState x:Name="Selected">
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="fillColor2" Storyboard.TargetProperty="Opacity">
<SplineDoubleKeyFrame KeyTime="0" Value=".75"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</vsm:VisualState>
</vsm:VisualStateGroup>
<vsm:VisualStateGroup x:Name="FocusStates">
<vsm:VisualState x:Name="Focused">
<Storyboard>
<ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetName="FocusVisualElement" Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<Visibility>Visible</Visibility>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</vsm:VisualState>
<vsm:VisualState x:Name="Unfocused"/>
</vsm:VisualStateGroup>
</vsm:VisualStateManager.VisualStateGroups>
<Rectangle x:Name="fillColor" IsHitTestVisible="False" Opacity="0" RadiusX="1" RadiusY="1" Fill="Transparent"/>
<Rectangle x:Name="fillColor2" IsHitTestVisible="False" Opacity="0" Fill="#FF00FF00" RadiusX="1" RadiusY="1"/>
<ContentPresenter HorizontalAlignment="Left" Margin="{TemplateBinding Padding}" x:Name="contentPresenter" Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}"/>
<Rectangle x:Name="FocusVisualElement" Visibility="Collapsed" Stroke="#FF6DBDD1" StrokeThickness="1" RadiusX="1" RadiusY="1"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="White">
<ListBox x:Name="ListBoxTest">
<ListBoxItem Content="Some String" Style="{StaticResource ListBoxItemStyleTransparent}" />
</ListBox>
</Grid>
</UserControl>
Le rectangle fillColor spécifie la couleur à utiliser lorsque l'utilisateur souris-sur un ListBoxItem. Dans le code ci-dessus, j'ai défini ce paramètre pour qu'il soit transparent, donc aucune couleur n'apparaîtra lorsque vous passerez la souris sur le ListBoxItem.
fillColor2 spécifie la couleur à utiliser lorsqu'un objet ListBoxItem est sélectionné. Dans le code ci-dessus j'ai spécifié # FF00FF00 donc la couleur sera vert clair quand un ListBoxItem est sélectionné.
Dans votre situation, vous devez définir la propriété Fill du rectangle fillColor2 sur Transparent pour ne pas simuler de couleur lorsque l'utilisateur sélectionne un élément.
C'est une très bonne réponse, malheureusement, je dois définir le style que je programatically remplir la zone de liste avec toutes sortes d'articles différents. Peut-être que j'ai besoin d'utiliser des données templating hrmm ... – JSmyth
Votre réponse a travaillé avec moi en ajoutant myListItem.Style = (Style) this.Resources ["ListBoxItemStyleTransparent"]; Vous marquerez votre réponse comme la réponse acceptée :) – JSmyth
Oui, c'est ainsi que vous référencez le style par programmation. Si vous utilisez le style sur plusieurs fichiers .xaml, une autre chose à considérer est de le déclarer dans dans App.xaml. Vous pouvez ensuite le référencer via Application.Current.Resources ["ListBoxItemStyleTransparent"]. –