使用 AlternationIndex 的格式/样式

Format/ Style using AlternationIndex

我有一个项目控件,如果它是最后一个项目,我想显示一个按钮。是否可以使用 AlternationIndex 来做到这一点?

<Button.Style>
  <Style TargetType="{x:Type Button}" BasedOn="{StaticResource RoundButton}">
    <Style.Triggers>
      <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type ContentPresenter}}, Path=(ItemsControl.AlternationIndex)}" Value="0"> <!-- What do I give here? 0 hides first row -->
        <Setter Property="Visibility" Value="Collapsed"/>
      </DataTrigger>
    </Style.Triggers>
  </Style>
</Button.Style>

可能有点复杂,但您可以在 DataTrigger 中使用 MultiBinding,它将 AlternationIndex 属性 与 ItemsControl 的项目的 Count 属性 进行比较:

<Style TargetType="Button" BasedOn="{StaticResource RoundButton}">
    <Setter Property="Visibility" Value="Collapsed"/>
    <Style.Triggers>
        <DataTrigger Value="True">
            <DataTrigger.Binding>
                <MultiBinding Converter="{StaticResource IsLastItemConverter}">
                    <Binding Path="(ItemsControl.AlternationIndex)"
                             RelativeSource="{RelativeSource
                                              AncestorType=ContentPresenter}"/>
                    <Binding Path="Items.Count"
                             RelativeSource="{RelativeSource
                                              AncestorType=ItemsControl}"/>
                </MultiBinding>
            </DataTrigger.Binding>
            <Setter Property="Visibility" Value="Visible"/>
        </DataTrigger>
    </Style.Triggers>
</Style>

多值转换器如下所示:

public class IsLastItemConverter : IMultiValueConverter
{
    public object Convert(
        object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        var index = (int)values[0];
        var count = (int)values[1];
        return index == count - 1;
    }

    public object[] ConvertBack(
        object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}