2009-03-17 12 views
0

Je suis nouveau dans les styles et j'ai besoin d'aide pour créer un style pour un objet ListBoxItem qui donnera un arrière-plan transparent à l'élément, puis la police deviendra Gold lorsque survolée. Il ne devrait pas changer la couleur lorsqu'on clique dessus et revenir à la normale lorsque la souris se déplace. Il doit encore passer l'objet sélectionné à l'événement PreviewMouseRightButtonDown pour le ListBoxAide Création d'un style pour un ListBoxItem

J'utilise actuellement un dictionnaire par défaut de REUXABLES THEMES, mais il est beaucoup de colorer pour cette partie de l'affichage sur l'application.

Merci,

<DataTemplate x:Key="ItemsTemplate"> 
     <StackPanel Orientation="Vertical" 
       Margin="0,5,0,5" 
       Width="{Binding 
       Path=ActualWidth, 
       RelativeSource={RelativeSource 
       Mode=FindAncestor, 
       AncestorType={x:Type ScrollContentPresenter}}}" MaxWidth="{Binding RelativeSource={RelativeSource FindAncestor, 
       AncestorType={x:Type ScrollViewer}}, Path=ViewportWidth}" > 
      <TextBlock VerticalAlignment="Top" TextWrapping="Wrap" FontSize="14" Text="{Binding Path=CID}" /> 
       <StackPanel Orientation="Horizontal" Margin="0,5,0,0" > 
        <TextBlock> 
         <Label Foreground="{DynamicResource DisabledForegroundBrush}" >Posted by</Label> 
         <Label Foreground="{DynamicResource DisabledForegroundBrush}" VerticalContentAlignment="Top" Content="{Binding Path=ACID}" /> 
        </TextBlock> 
        <TextBlock> 
         <Label Foreground="{DynamicResource DisabledForegroundBrush}" Margin="3,0,0,0">at</Label> 
         <Label Foreground="{DynamicResource DisabledForegroundBrush}" Margin="3,0,3,0" VerticalContentAlignment="Top" Content="{Binding Path=Type}" /> 
        </TextBlock> 
        <TextBlock> 
         <Label Foreground="{DynamicResource DisabledForegroundBrush}">(</Label> 
         <Label Foreground="{DynamicResource DisabledForegroundBrush}" VerticalContentAlignment="Top" Content="{Binding Path=Route}" /> 
         <Label Foreground="{DynamicResource DisabledForegroundBrush}">)</Label> 
        </TextBlock> 
       </StackPanel> 

      </StackPanel> 
    </DataTemplate> 

    <Style x:Key="ItemsListBox" TargetType="{x:Type ListBoxItem}"> 
     <Setter Property="SnapsToDevicePixels" Value="true"/> 
     <Setter Property="Background" Value="{DynamicResource Transparent}"/> 
     <Setter Property="BorderBrush" Value="{DynamicResource Transparent}"/> 
     <Setter Property="BorderBrush" Value="{DynamicResource Transparent}"/> 
     <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/> 
    </Style> 

<ListBox x:Name="ListViewFlightPlans" Grid.Column="0" ItemTemplate="{DynamicResource ItemsTemplate}" 
         MaxWidth="800" ScrollViewer.HorizontalScrollBarVisibility="Disabled" BorderBrush="Black" BorderThickness="2,0,0,1"> 

      </ListBox> 

Dave

Répondre

1

Malheureusement le changement BorderBrush pour la ListBoxItem n'aura pas l'effet désiré, puisque le Border avec le point culminant de sélection est interne à la ControlTemplate du ListBoxItem. Au lieu de cela, vous pouvez ajouter une nouvelle ressource Brush avec la clé SystemColors.HighlightBrushKey, c'est la touche utilisée par le ListBoxItem pour définir la couleur de surbrillance de sélection. La brosse de sélection inactive utilise la clé de SystemColors.ControlBrushKey, donc si vous remplacez les deux avec un Brush transparent, vous êtes assuré de ne pas avoir de couleur de sélection. Vous pouvez en lire plus à ce sujet dans this article.

Voici un exemple avec tout mais votre DataTemplate:

<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Grid.Resources> 
     <x:Array x:Key="data" Type="{x:Type sys:String}"> 
      <sys:String>a </sys:String> 
      <sys:String>bb</sys:String> 
      <sys:String>ccc</sys:String> 
      <sys:String>dddd</sys:String> 
     </x:Array> 
    </Grid.Resources> 
    <ListBox ItemsSource="{StaticResource data}"> 
     <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.Triggers> 
        <Trigger Property="IsSelected" Value="True"> 
         <Setter Property="Foreground" Value="Black"/> 
        </Trigger> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="Foreground" Value="Gold"/> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </ListBox.Resources> 
    </ListBox> 
</Grid> 
+0

Merci, très belle réponse et l'exemple a parfaitement fonctionné. – user38349