Чередование индекса с триггерами данных

У меня есть список с индексом чередования 2 на нем. Затем я настроил стиль, чтобы обеспечить стилизацию для различных индексов чередования.

<Style x:Key="ListBoxItemStyle" TargetType="{x:Type ListBoxItem}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ListBoxItem}">
                <Grid>
                    <Border x:Name="Bd" SnapsToDevicePixels="true">
                        <ContentPresenter Margin="{TemplateBinding Padding}"
                                          HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                          VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                          SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
                    </Border>
                    <Rectangle x:Name="HoverRectangle"
                               Height="Auto"
                               SnapsToDevicePixels="True"
                               Stroke="{StaticResource Gold}"
                               StrokeDashCap="Square"
                               StrokeThickness="0" />
                    <Rectangle x:Name="KeyboardFocusRectangle"
                               Height="Auto"
                               SnapsToDevicePixels="True"
                               Stroke="{StaticResource BrightBlue}"
                               StrokeDashCap="Square"
                               StrokeThickness="0" />
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="ItemsControl.AlternationIndex" Value="1">
                        <Setter TargetName="Bd" Property="Background" Value="{StaticResource LightGray}" />
                    </Trigger>
                    <Trigger Property="ItemsControl.AlternationIndex" Value="0">
                        <Setter TargetName="Bd" Property="Background" Value="{StaticResource VeryLightGray}" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Я также хочу изменить фон на предметы, если они произойдут в будущем. У меня есть функция IsFuture, возвращающая логическое значение. Затем я получил этот код, работающий в шаблоне данных для стилизации фона.

<DataTemplate x:Key="MeetingListItemTemplate">
    <Grid x:Name="grid">
          <!-- Removed lots of stuff here-->
    </Grid>
    <DataTemplate.Triggers>
        <MultiDataTrigger>
            <MultiDataTrigger.Conditions>
                <Condition Binding="{Binding Path=IsFuture}" Value="True"/>
            </MultiDataTrigger.Conditions>
            <MultiDataTrigger.Setters>
                <Setter Property="Background" Value="#0094d6" TargetName="grid"/>
            </MultiDataTrigger.Setters>
        </MultiDataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>

Я настроил MutliDataTrigger, чтобы у меня было условие для индекса чередования, а затем я использовал разные синие цвета для каждого чередования, но я не уверен, как отсюда получить индекс чередования. Есть идеи?

2 ответа

Решение
<MultiDataTrigger.Conditions>
     <Condition Binding="{Binding Path=IsFuture}" Value="true" />
     <Condition Binding="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=(ItemsControl.AlternationIndex)}"  Value="0"/>
</MultiDataTrigger.Conditions>

Попробуйте режим TemplatedParent RelativeSource.

Вы должны быть в состоянии использовать RelativeSource привязка к привязке к AlternationIndex собственность родителя ItemsControl:

<MultiDataTrigger.Conditions>
    <Condition Binding="{Binding Path=IsFuture}" Value="True" />
    <Condition Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ItemsControl}, Path=AlternationIndex}" Value="1"
</MultiDataTrigger.Conditions>
Другие вопросы по тегам