ListView IsSelected MouseOver Focused - Color

  • WPF
  • .NET 5–6

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Akanel.

    ListView IsSelected MouseOver Focused - Color

    Hallo Ihr Lieben,

    ich sitze nun seit mehreren Stunden an dem Problem, dass ich einfach nicht herausbekomme, wie ich in einem ListView, die Farben anpassen kann, vom SelectedItem oder dem Focusierten Item, auch mit Google hab ich einfach nichts gefunden das funktioniert.

    Ich verwende folgende ListView:

    XML-Quellcode

    1. <ListView Grid.Row="1"
    2. ItemsSource="{Binding OpenTickets, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
    3. SelectedItem="{Binding SelectedTicket, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
    4. ScrollViewer.CanContentScroll="False"
    5. Background="Transparent"
    6. BorderThickness="0">
    7. <ListView.ItemTemplate>
    8. <DataTemplate>
    9. <local:TicketView HorizontalAlignment="Center"/>
    10. </DataTemplate>
    11. </ListView.ItemTemplate>
    12. <ListView.ItemContainerStyle>
    13. <Style TargetType="ListViewItem">
    14. <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
    15. </Style>
    16. </ListView.ItemContainerStyle>
    17. <ListView.InputBindings>
    18. <KeyBinding Key="Delete"
    19. Command="{Binding RemoveTicketCommand}"/>
    20. </ListView.InputBindings>
    21. </ListView>

    So weit, funktioniert alles wie es soll, nur stört es mich noch massiv, dass ein Item das Selectiert ist, diese bescheuerte blaue Farbe bekommt, auf folgendem Screenshot ist denke ich am besten zu sehen, was ich meine:


    Wie und wo kann ich das anpassen, das selectierte Item soll einfach nur Grau werden, keine Border kein nix, die Farbe soll auch bestehen bleiben, wenn das Item den Focus verliert, aber noch immer selectiert ist.

    Ich habs nun mehrfach mit Styles versucht (ItemContainerStyle), aber ich bekomme es schlicht nicht zum Laufen, das nervt gerade echt tierisch


    LG und Danke







    Nachtrag: habs hinbekommen, auch wenns nicht sehr elegant scheint, so funktioniert es immerhin

    XML-Quellcode

    1. <ListView.ItemContainerStyle>
    2. <Style TargetType="ListViewItem">
    3. <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
    4. <Setter Property="Template">
    5. <Setter.Value>
    6. <ControlTemplate TargetType="ListViewItem">
    7. <Border Background="{DynamicResource BackGroundBrush}" Margin="0" CornerRadius="5">
    8. <ContentPresenter/>
    9. </Border>
    10. </ControlTemplate>
    11. </Setter.Value>
    12. </Setter>
    13. <Style.Triggers>
    14. <Trigger Property="IsSelected" Value="True">
    15. <Setter Property="Template">
    16. <Setter.Value>
    17. <ControlTemplate TargetType="ListViewItem">
    18. <Border Background="{DynamicResource SelectedItemBackGroundBrush}" Margin="0" CornerRadius="5">
    19. <ContentPresenter/>
    20. </Border>
    21. </ControlTemplate>
    22. </Setter.Value>
    23. </Setter>
    24. </Trigger>
    25. </Style.Triggers>
    26. </Style>
    27. </ListView.ItemContainerStyle>
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „asusdk“ ()

    Versuch mal hiermit ein bisschen zu spielen.
    Hier kannst du auch sehen wie es eigentlich gemacht wird.

    VB.NET-Quellcode

    1. <SolidColorBrush x:Key="Item.MouseOver.Background" Color="#1F26A0DA"/>
    2. <SolidColorBrush x:Key="Item.MouseOver.Border" Color="#a826A0Da"/>
    3. <SolidColorBrush x:Key="Item.SelectedActive.Background" Color="#3D26A0DA"/>
    4. <SolidColorBrush x:Key="Item.SelectedActive.Border" Color="#FF26A0DA"/>
    5. <SolidColorBrush x:Key="Item.SelectedInactive.Background" Color="#3DDADADA"/>
    6. <SolidColorBrush x:Key="Item.SelectedInactive.Border" Color="#FFDADADA"/>
    7. <Style x:Key="ListViewItemStyle1" TargetType="{x:Type ListViewItem}">
    8. <Setter Property="SnapsToDevicePixels" Value="True"/>
    9. <Setter Property="Padding" Value="4,1"/>
    10. <Setter Property="HorizontalContentAlignment" Value="{Binding HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
    11. <Setter Property="VerticalContentAlignment" Value="{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
    12. <Setter Property="Background" Value="Transparent"/>
    13. <Setter Property="BorderBrush" Value="Transparent"/>
    14. <Setter Property="BorderThickness" Value="1"/>
    15. <Setter Property="Template">
    16. <Setter.Value>
    17. <ControlTemplate TargetType="{x:Type ListViewItem}">
    18. <Border x:Name="Bd" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true">
    19. <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
    20. </Border>
    21. <ControlTemplate.Triggers>
    22. <MultiTrigger>
    23. <MultiTrigger.Conditions>
    24. <Condition Property="IsMouseOver" Value="True"/>
    25. </MultiTrigger.Conditions>
    26. <Setter Property="Background" TargetName="Bd" Value="{StaticResource Item.MouseOver.Background}"/>
    27. <Setter Property="BorderBrush" TargetName="Bd" Value="{StaticResource Item.MouseOver.Border}"/>
    28. </MultiTrigger>
    29. <MultiTrigger>
    30. <MultiTrigger.Conditions>
    31. <Condition Property="Selector.IsSelectionActive" Value="False"/>
    32. <Condition Property="IsSelected" Value="True"/>
    33. </MultiTrigger.Conditions>
    34. <Setter Property="Background" TargetName="Bd" Value="{StaticResource Item.SelectedInactive.Background}"/>
    35. <Setter Property="BorderBrush" TargetName="Bd" Value="{StaticResource Item.SelectedInactive.Border}"/>
    36. </MultiTrigger>
    37. <MultiTrigger>
    38. <MultiTrigger.Conditions>
    39. <Condition Property="Selector.IsSelectionActive" Value="True"/>
    40. <Condition Property="IsSelected" Value="True"/>
    41. </MultiTrigger.Conditions>
    42. <Setter Property="Background" TargetName="Bd" Value="{StaticResource Item.SelectedActive.Background}"/>
    43. <Setter Property="BorderBrush" TargetName="Bd" Value="{StaticResource Item.SelectedActive.Border}"/>
    44. </MultiTrigger>
    45. <Trigger Property="IsEnabled" Value="False">
    46. <Setter Property="TextElement.Foreground" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
    47. </Trigger>
    48. </ControlTemplate.Triggers>
    49. </ControlTemplate>
    50. </Setter.Value>
    51. </Setter>
    52. </Style>


    Noch etwas zum lesen, weil ich bei dir nur DynamicResource sehe.
    Tutorialreihe <WPF lernen/>
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.