Como dice el título, estoy tratando de cambiar los colores de fondo ListViewItem cuando se carga el elemento. Puedo cambiar la opacidad (mi XAML muy rayado):

<ListView Background="Black" ItemsSource="{Binding Somesource}" Drop="AddItem">
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=OneWay}" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ListViewItem}">
                        <Grid x:Name="SignalGrid">
                            <!-- Grid Information -->
                        </Grid>
                        <ControlTemplate.Triggers>
                            <DataTrigger Binding="{Binding Path=IsSelected}" Value="false">
                                <Setter TargetName="SignalGrid" 
                                        Property="Background" 
                                        Value="Transparent"/>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Path=IsSelected}" Value="true">
                                <Setter TargetName="SignalGrid" 
                                        Property="Background" Value="Blue"/>
                            </DataTrigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <EventTrigger RoutedEvent="Loaded">
                    <BeginStoryboard>
                        <Storyboard AutoReverse="True" 
                                    RepeatBehavior="6x">
                            <DoubleAnimation Duration="0:0:0.3"
                                          Storyboard.TargetProperty="Opacity" 
                                          From="1.0" To="0.3"/>
                        </Storyboard>
                     </BeginStoryboard>
                 </EventTrigger>
             </Style.Triggers>
         </Style>
     </ListView.ItemContainerStyle>
</ListView>

Esto funciona bien, sin embargo, no es la verdadera característica que quiero. Traté de hacer el storyboard como:

<Storyboard AutoReverse="True" RepeatBehavior="6x">
    <ColorAnimation Duration="0:0:0.3" 
                    Storyboard.TargetProperty="(ListViewItem.Background).(SolidColorBrush.Color)" To="Blue"/>
</Storyboard>

Sin embargo esto no hace nada. Incluí IsSelected DataTriggers porque la idea básica es que quiero cambiar entre IsSelected = true a IsSelected = false cuando el elemento se agrega por primera vez (es decir, el fondo alterna entre azul y negro ) Supongo que mi problema es con Storyboard.TargetProperty="(ListViewItem.Background).(SolidColorBrush.Color)" y estoy seguro de que me falta algo simple, pero agradecería cualquier ayuda.

EDITAR encontré la solución. En <!-- Grid Information --> tengo un borde, así que utilicé esta solución para resolver mi problema.

0
eye_am_groot 13 sep. 2018 a las 17:44

3 respuestas

La mejor respuesta

Solo para cerrar la pregunta. Como se menciona en "EDITAR", en <!-- Grid Information -->, tengo un border, y lo cambié así:

<Border>
    <Border.Background>
        <SolidColorBrush Color="Black" x:Name="RowBackground"/>
    </Border.Background>
</Border>

Entonces, todavía en la ControlTemplate:

<ControlTemplate.Triggers>
    <DataTrigger Binding="{Binding Path=IsSelected}" Value="false">
        <Setter TargetName="SignalGrid" Property="Background" Value="Transparent"/>
    </DataTrigger>
    <DataTrigger Binding="{Binding Path=IsSelected}" Value="true">
        <Setter TargetName="SignalGrid" Property="Background" Value="Blue"/>
    </DataTrigger>
    <EventTrigger RoutedEvent="Loaded">
        <BeginStoryboard>
            <Storyboard AutoReverse="True" RepeatBehavior="6x">
                <ColorAnimation Duration="0:0:0.5" Storyboard.TargetName="RowBackground" 
                                Storyboard.TargetProperty="Color" To="Blue"/>
            </Storyboard>
        </BeginStoryboard>
    </EventTrigger>
</ControlTemplate.Triggers>
0
eye_am_groot 13 sep. 2018 a las 18:24

Esto debería hacer que ListViewItem parpadee cuando se carga:

<ListView ItemsSource="{Binding Somesource}">
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=OneWay}" />
            <Setter Property="Background" Value="Transparent" />
            <Style.Triggers>
                <EventTrigger RoutedEvent="Loaded">
                    <BeginStoryboard>
                        <Storyboard AutoReverse="True" RepeatBehavior="6x">
                            <ColorAnimation Duration="0:0:0.3" 
                                            Storyboard.TargetProperty="(ListViewItem.Background).(SolidColorBrush.Color)" 
                                            To="Blue"/>
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Style.Triggers>
        </Style>
    </ListView.ItemContainerStyle>
</ListView>
1
mm8 13 sep. 2018 a las 15:03
<ListView Background="Black" ItemsSource="{Binding Somesource}" Drop="AddItem">
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=OneWay}" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ListViewItem}">
                        <Grid x:Name="SignalGrid"  Background="{TemplateBinding Background}">
          <!-- Grid Information -->
    </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <EventTrigger RoutedEvent="Loaded">
                    <BeginStoryboard>
                        <Storyboard AutoReverse="True" RepeatBehavior="6x">
    <ColorAnimation Duration="0:0:0.3" 
                    Storyboard.TargetProperty="(ListViewItem.Background).(SolidColorBrush.Color)" To="Blue"/>
</Storyboard>
                     </BeginStoryboard>
                 </EventTrigger>
             </Style.Triggers>
         </Style>
     </ListView.ItemContainerStyle>
</ListView>
1
Ilya Grigoryan 13 sep. 2018 a las 16:14