2010-08-13 10 views
1

J'ai un ListView, avec ListView.View comme GridView.Déclencheur dans WPF ne fonctionne pas

Par défaut, le mouseOver fonctionne, ListViewItem est mis en surbrillance lorsque je souris, et est sélectionné lorsque je clique dessus. Mais après avoir modifié le ControlTemplate, j'obtiens le modèle que je veux, mais la surbrillance et la sélection ont disparu.

J'utilise le déclencheur, mais cela ne fonctionne pas.

Voici mon code.

<Style x:Key="filesListViewItemStyle" TargetType="{x:Type ListViewItem}"> 
      <Setter Property="IsSelected" Value="{Binding FileIsSelected}"/> 
      <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="ListViewItem"> 
         <Grid Height="40"> 
          <GridViewRowPresenter/> 
          <Line X1="0.0" Y1="0.0" X2="{Binding ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListView}}}" Y2="0.0" StrokeThickness="1" StrokeDashArray="2" Stroke="Gray" /> 
         </Grid> 
         <ControlTemplate.Triggers> 
          <Trigger Property="IsMouseOver" Value="True"> 
           <Setter Property="Background" Value="Green"/> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 

Dans mon modèle, en fait j'ajouté une ligne comme séparateur entre 2 rangées de ListViewItem. Je n'arrive pas à comprendre pourquoi la gâchette ne fonctionne pas!

+0

S'il vous plaît vérifier contre le ControlTemplate par défaut ListViewItem pour voir si vous ne l'avez pas manqué quoi que ce soit. Ou vous pouvez prendre cela comme une base et le modifier à votre goût. J'ai généralement tendance à éviter le remplacement ControlTemplates (sauf si absolument nécessaire) parce que je ne suis pas sûr de comprendre toutes les subtilités .. – Gishu

Répondre

2

La propriété Background d'un contrôle est uniquement utilisée dans ControlTemplate. Vous avez remplacé le modèle par un modèle qui n'utilise pas l'arrière-plan. La définition de la propriété n'a donc aucun effet. Vous pouvez utiliser {TemplateBinding Background} pour lier des propriétés à l'arrière-plan du contrôle. Peut-être que vous voulez lier l'arrière-plan de la grille à elle:

<ControlTemplate TargetType="ListViewItem"> 
    <Grid Height="40" Background="{TemplateBinding Background}"> 
     <GridViewRowPresenter/> 
+1

Ça marche !!! Merci!!! 1 ligne de code a résolu mes 12 heures misérables! – VHanded

Questions connexes