ListView AlternationIndex

  • WPF

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

    ListView AlternationIndex

    Hallo Leute,

    ich baue gerade an einer ListView und wollte den AlternationIndex als Grundlage festlegen. Leider klappt das nicht so, wie ich mir das gedacht habe.
    Ich habe auch im Netz schon unzählige Seiten durchforstet und überall geht es. Ich habe viele Codesnippets gefunden, versucht und scheitere dennoch an einem Punkt:

    Bei mir wird immer nur der Trigger genutzt, dessen AlternationIndex den Wert 0 aufweist. Und ich habe keine Ahnung, warum das sein könnte.

    Folgenden Code habe ich geschrieben

    XML-Quellcode

    1. <ListView ItemsSource="{Binding MaterialView}" IsSynchronizedWithCurrentItem="True" SelectionMode="Single" Grid.IsSharedSizeScope="True" AlternationCount="2">
    2. <ListView.ItemContainerStyle>
    3. <Style TargetType="ListViewItem">
    4. <Setter Property="Template">
    5. <Setter.Value>
    6. <ControlTemplate TargetType="ListViewItem">
    7. <Grid>
    8. <Grid.Style>
    9. <Style TargetType="Grid">
    10. <Style.Triggers>
    11. <Trigger Property="ItemsControl.AlternationIndex" Value="1">
    12. <Setter Property="Background" Value="Red"/>
    13. </Trigger>
    14. <Trigger Property="ItemsControl.AlternationIndex" Value="0">
    15. <Setter Property="Background" Value="Blue"/>
    16. </Trigger>
    17. </Style.Triggers>
    18. </Style>
    19. </Grid.Style>
    20. <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
    21. VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
    22. SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
    23. </Grid>
    24. </ControlTemplate>
    25. </Setter.Value>
    26. </Setter>
    27. </Style>
    28. </ListView.ItemContainerStyle>




    Ich habe auch schon versucht, das ganze nicht im ItemContainerTemplate zu versehen, sondern im ItemTemplate selbst, das gleiche Resultat. Es färbt sich immer alles und nur das, dessen Wert auf 0 gesetzt ist.

    Habt vielen Dank für Anregungen
    Bilder
    • 2022-03-26 18_09_05-WoolMaster3000 - Microsoft Visual Studio.png

      16,7 kB, 636×171, 61 mal angesehen
    Okay, ich habe das Problem nun beheben können. Das Problem lag offensichtlich daran, dass ich nicht tief genug gedacht habe. Ich darf hier nicht den Style des Grid überschreiben, sondern muss ja den Style des ListViewItems überschreiben. Entsprechend muss der Code so aussehen:

    XML-Quellcode

    1. <ListView.ItemContainerStyle>
    2. <Style TargetType="ListViewItem">
    3. <Setter Property="Template">
    4. <Setter.Value>
    5. <ControlTemplate TargetType="ListViewItem">
    6. <Grid x:Name="GridContainer">
    7. <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
    8. VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
    9. SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
    10. </Grid>
    11. <ControlTemplate.Triggers>
    12. <Trigger Property="ListView.AlternationIndex" Value="0">
    13. <Setter Property="Background" Value="Red" TargetName="GridContainer"/>
    14. </Trigger>
    15. <Trigger Property="ListView.AlternationIndex" Value="1">
    16. <Setter Property="Background" Value="Green" TargetName="GridContainer"/>
    17. </Trigger>
    18. <Trigger Property="IsMouseOver" Value="True">
    19. <Setter Property="Background" Value="Yellow" TargetName="GridContainer"/>
    20. </Trigger>
    21. <Trigger Property="IsSelected" Value="True">
    22. <Setter Property="Background" Value="Pink" TargetName="GridContainer"/>
    23. </Trigger>
    24. </ControlTemplate.Triggers>
    25. </ControlTemplate>
    26. </Setter.Value>
    27. </Setter>
    28. </Style>
    29. </ListView.ItemContainerStyle>


    Ich muss dem ControlTemplateTrigger sagen, dass er eine Änderung vornehmen soll (dieser bezieht sich noch auf das gesamte ListViewItem) und dem Trigger selbst muss ich mittels TargetName noch sagen, welches seiner Template-Controls ich diesen Wert ändern möchte. Ich habe also das Überschreiben des Templates nicht tief genug durchgezogen :) Aber so kann zumindest die Nachwelt - sofern sie auch auf ein solches Problem stößt - hier eine Lösung finden
    Bilder
    • 2022-03-27 15_43_09-Window.png

      29,59 kB, 931×312, 55 mal angesehen