При добавлении нового фона элемента ListView мигать - PullRequest
0 голосов
/ 13 сентября 2018

Как гласит заголовок, я пытаюсь изменить цвет фона ListViewItem при загрузке элемента. Я могу изменить непрозрачность (мой XAML с очень чередованием):

<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>

Это отлично работает, но это не та особенность, которую я хочу. Я пытался сделать storyboard вроде:

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

Однако это ничего не делает. Я включил IsSelected DataTriggers, потому что основная идея заключается в том, что я хочу переключаться между IsSelected = true на IsSelected = false при первом добавлении элемента (то есть фон переключается между синим и черным). Я предполагаю, что моя проблема связана с Storyboard.TargetProperty="(ListViewItem.Background).(SolidColorBrush.Color)", и я уверен, что упускаю что-то простое, но любая помощь будет принята с благодарностью.

РЕДАКТИРОВАТЬ Я нашел решение. В <!-- Grid Information --> у меня есть граница, поэтому я использовал это решение , чтобы решить мою проблему.

Ответы [ 3 ]

0 голосов
/ 13 сентября 2018
<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>
0 голосов
/ 13 сентября 2018

Просто чтобы закрыть вопрос. Как упоминалось в «РЕДАКТИРОВАТЬ», в <!-- Grid Information --> у меня есть border, и я изменил его так:

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

Тогда еще в 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 голосов
/ 13 сентября 2018

Это должно заставить ListViewItem мигать при загрузке:

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...