Changement ListViewItem couleur de fond au survol de la souris
J'ai besoin d'un peu d'aide ici. Je ne peux pas comprendre pourquoi aucune des solutions que j'ai trouvé du travail pour mon cas. Prenons l'exemple d'un Listview avec ces éléments:
<ListView.Items>
<ListViewItem>
<TextBlock xml:space="preserve"> 1 <Bold>I'm bold</Bold> </TextBlock>
</ListViewItem>
<ListViewItem>
<TextBlock xml:space="preserve"> 2 Im not </TextBlock>
</ListViewItem>
</ListView.Items>
D'abord sur le vol stationnaire chaque ligne j'ai vu le point culminant de la TextBlock dans son défaut de lumière bleue. Il ne souligné la zone de texte:
Je ne veux pas que je veux mettre en évidence celui de l'ensemble de la ligne, et je veux décider de la couleur. Je veux aussi que le point culminant de l'ensemble de la ligne lors de la sélection:
J'ai été jouer avec les Styles, les Triggers ou la ItemContainerStyle. J'ai réalisé que je dois considérer le fond de la zone de texte, et l'un des ListViewItem pour la zone de texte. Et l'arrière-plan de l'ensemble de la ligne semble être une entreprise de la ListView.ItemContainerStyle.
Le résultat de l'ajout d'un style pour la zone de texte:
<Style x:Key="TextBlockStyle" TargetType="{x:Type TextBlock}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Foreground" Value="Black" />
<Setter Property="Background" Value="White"/>
</Trigger>
</Style.Triggers>
</Style>
<ListView Grid.Column="1" Margin="0" HorizontalContentAlignment="Stretch" BorderThickness="0" >
<ListView.Resources>
<Style BasedOn="{StaticResource TextBlockStyle}" TargetType="{x:Type TextBlock}" />
</ListView.Resources>
est:
Puis-je ajouter un autre style pour essayer de se débarrasser de la liste de rappel selon la zone de texte:
<Style x:Key="ListViewItemStyle" TargetType="{x:Type ListViewItem}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Gold" />
</Trigger>
</Style.Triggers>
</Style>
<ListView Grid.Column="1" Margin="0" HorizontalContentAlignment="Stretch" BorderThickness="0" >
<ListView.Resources>
<Style BasedOn="{StaticResource TextBlockStyle}" TargetType="{x:Type TextBlock}" />
<Style BasedOn="{StaticResource ListViewItemStyle}" TargetType="{x:Type ListViewItem}" />
</ListView.Resources>
Mais cela n'a aucun effet.
Et en essayant de mettre en évidence l'ensemble de la ligne avec ce qui ne fonctionne pas:
<ItemsControl.ItemContainerStyle>
<Style>
<Style.Triggers>
<Trigger Property="Control.IsMouseOver" Value="True">
<Setter Property="Control.Background" Value="Gold" />
</Trigger>
</Style.Triggers>
</Style>
</ItemsControl.ItemContainerStyle>
Et j'ai essayé plusieurs autres suggestions pour des heures. Celui-ci:
Supprimer la souris sur l'effet sur une ListView dans WPF évite la surbrillance dans le texte sur le vol stationnaire,à la fois pour la zone de texte et la ListViewItem, mais je ne sais pas comment changer l'arrière-plan de l'ensemble de la ligne.
Quelqu'un pourrait-il donner un exemple de ce que je suis en train de faire?
OriginalL'auteur Miguel Angel Fas | 2016-07-01
Vous devez vous connecter pour publier un commentaire.
Le moyen le plus facile de voir et de changer tous les style-options pour un élément donné est d'exporter le modèle par défaut pour un contrôle.
Donc ouvrez Visual Studio ou le Mélange et faites un Clic Droit dans la Vue de Conception sur un contrôle. Passez à "Modifier le Modèle" - >, Et sélectionnez " Modifier une Copie...'
De sortie:
Maintenant, vous avez un bon point de départ pour obtenir votre ItemContainerStyle personnalisés.
OriginalL'auteur mathayk
Essayez ceci:
` TargetType="{x:Type de ListViewItem}"` est important dans ce cas.
cette méthode ne fonctionne pas, voir @mathayk post ci-dessus. affichage de la liste est de loin beaucoup plus complexe de contrôle et de changer le Fond tout simplement ne rien faire.
qui a fonctionné pour moi en revanche j'ai wan pas à se débarrasser de la pente chose que vous ne savez pas comment, si je viens de définir la couleur de fond la couleur, mais il gradient de chose reste
OriginalL'auteur mechanic
Bien, j'ai laissé tomber et a tenté une autre voie. J'ai réalisé que la modification de la ListViewItems pour les Boutons, puis l'ensemble de la ligne a été mis en évidence sur le dessus de la souris. J'étais à la recherche ce n'est pas seulement pour des raisons esthétiques. Dans la situation d'origine, l'utilisateur doit déplacer le pointeur juste sur le texte pour le sélectionner. Mais maintenant, ils peuvent sélectionnez simplement avoir le pointeur de la ligne, vous n'avez pas besoin d'aller et de déplacer la souris sur le texte. Je trouve ça beaucoup plus confortable et rapide pour l'utilisateur, et c'est très important pour le type d'interface, je suis en train de faire, car ils vont avoir besoin de faire assez souvent.
Donc, le code de @mathayk fonctionne pour moi avec des Boutons au lieu de ListViewItems.
Merci à vous tous pour votre temps.
OriginalL'auteur Miguel Angel Fas