Ich versuche, eine ListView in meiner WPF-basiert zu gestaltenAnwendung. Was ich versuche zu tun, ist einen Gradienteneffekt beim Mouseover in Zeilen zu erzeugen. Was ich jedoch nicht will, ist der standardmäßige glasartige Effekt, der den Zeilen hinzugefügt wird. Selbst mit meinem eigenen Styling (unten) ist der glasartige Effekt immer noch vorhanden.
XAML-Stil
<Style TargetType="{x:Type ListViewItem}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush>
<GradientStop Color="#39B4E7" Offset="0"/>
<GradientStop Color="#4297BB" Offset="1"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="Green" />
</Trigger>
</Style.Triggers>
</Style>
Listenansicht
<ListView Grid.Row="0" ItemsSource="{Binding Projects}" SelectedItem="{Binding CurrentProject}" Margin="3" ItemContainerStyle="{StaticResource ListViewItemContainerStyle}">
<ListView.View>
<GridView>
<GridViewColumn Header="" DisplayMemberBinding="{Binding ShortName}" />
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" />
<GridViewColumn Header="Owner" DisplayMemberBinding="{Binding User.Name}" />
<GridViewColumn Header="Versions" DisplayMemberBinding="{Binding Versions.Count}" />
</GridView>
</ListView.View>
</ListView>
Neuer XAML-Style
<Style x:Key="ListViewItemContainerStyle" TargetType="{x:Type ListViewItem}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush>
<GradientStop Color="#39B4E7" Offset="0"/>
<GradientStop Color="#4297BB" Offset="1"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="Green" />
</Trigger>
</Style.Triggers>
</Style>
Ist das möglich?
Antworten:
1 für die Antwort № 1Jeder ListViewItem
befindet sich in einem Contianer, und dieser Container erhält den Hintergrund für die Auswahl / den Hover. Sie müssen also einen Wert für die einstellen ItemContainerStyle
Attribut auf dem ListView
.
Beispiel...
<ListView ItemContainerStyle="{StaticResource ListViewItemContainerStyle}" />
der Style..
<Style x:Key="ListViewItemContainerStyle" TargetType="{x:Type ListViewItem}">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="#00000000" />
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#00000000"/>
</Style.Resources>
</Style>
Bearbeiten:
Für Ihren Fall können Sie also alles behalten, indem Sie diesen Stil in Ihrem Fall beibehalten ResourceDictionary
und füge das hinzu ItemContainerStyle
Attribut auf dem ListView
. Hoffe das hilft, lass es mich wissen, wenn du feststeckst.
Das war es, was ich früher gemacht habe, aber es wurde langweilig, also erweiterte ich die ListView
Steuerelement, um dies automatisch zu behandeln, und fügte ein Attribut für die Farbe Hover / Auswahl hinzu.
Aktualisierter Code:
<ListView Grid.Row="0" ItemsSource="{Binding Projects}" SelectedItem="{Binding CurrentProject}" Margin="3" ItemContainerStyle="{StaticResource ListViewItemContainerStyle}">
<ListView.View>
<GridView>
<GridViewColumn Header="" DisplayMemberBinding="{Binding ShortName}" />
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" />
<GridViewColumn Header="Owner" DisplayMemberBinding="{Binding User.Name}" />
<GridViewColumn Header="Versions" DisplayMemberBinding="{Binding Versions.Count}" />
</GridView>
</ListView.View>
</ListView>
** Die Ressourcendatei **
<Style TargetType="{x:Type ListViewItem}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush>
<GradientStop Color="#39B4E7" Offset="0"/>
<GradientStop Color="#4297BB" Offset="1"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="Green" />
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="ListViewItemContainerStyle" TargetType="{x:Type ListViewItem}">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="#00000000" />
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#00000000"/>
</Style.Resources>
</Style>