Wpf 无法设置ContentPresenter网格。行索引使用ItemsControl中的AlternationIndex

Wpf 无法设置ContentPresenter网格。行索引使用ItemsControl中的AlternationIndex,wpf,itemscontrol,contentpresenter,Wpf,Itemscontrol,Contentpresenter,我正在尝试使用AlternationIndex设置Grid.Row值,以使内容按Enter键处于正确位置。 但它似乎无法以样式为ContentPresenter绑定ItemsControl.AlternationIndex。 我可以通过样式触发器访问ItemsControl.AlternationIndex,但无法通过绑定访问。 您知道如何访问ContentPresenter的ItemsControl.AlternationIndex吗? 下面的代码是这个问题的简单演示 MainWindow.x

我正在尝试使用AlternationIndex设置Grid.Row值,以使内容按Enter键处于正确位置。 但它似乎无法以样式为ContentPresenter绑定ItemsControl.AlternationIndex。 我可以通过样式触发器访问ItemsControl.AlternationIndex,但无法通过绑定访问。 您知道如何访问ContentPresenter的ItemsControl.AlternationIndex吗? 下面的代码是这个问题的简单演示

MainWindow.xaml

<Window x:Class="ContentPresenterIndex.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:ContentPresenterIndex"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <ItemsControl ItemsSource="{Binding NameList}" AlternationCount="{Binding NameList.Count}">
            <ItemsControl.ItemContainerStyle>
                <Style TargetType="{x:Type ContentPresenter}">
                    <Setter Property="Grid.Row" Value="{Binding ItemsControl.AlternationIndex, RelativeSource={RelativeSource AncestorType={x:Type ContentPresenter}}}"/>
                <Setter Property="Grid.Row" Value="{Binding ItemsControl.AlternationIndex, RelativeSource={RelativeSource AncestorType={x:Type ContentPresenter}}}"/>
                <!--<Style.Triggers> <----- this is ok
                    <Trigger Property="ItemsControl.AlternationIndex" Value="1">
                        <Setter Property="Grid.Row" Value="1"/>
                    </Trigger>
                </Style.Triggers>-->
            </Style>
                </Style>
            </ItemsControl.ItemContainerStyle>
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <Grid IsItemsHost="True">
                        <Grid.RowDefinitions>
                            <RowDefinition/>
                            <RowDefinition/>
                            <RowDefinition/>
                            <RowDefinition/>
                        </Grid.RowDefinitions>
                    </Grid>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition/>
                            <ColumnDefinition/>
                        </Grid.ColumnDefinitions>
                        <TextBlock Text="{Binding Name}" Grid.Column="0"/>
                        <TextBlock Text="{Binding Age}" Grid.Column="1"/>
                    </Grid>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </Grid>
</Window>

MainWindow.xaml.cs

namespace ContentPresenterIndex
{
    public class NameItem
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }

    public partial class MainWindow : Window
    {
        public ObservableCollection<NameItem> NameList { get; set; }
        public MainWindow()
        {
            InitializeComponent();
            DataContext = this;

            NameList = new ObservableCollection<NameItem>
            {
                new NameItem { Name = "John", Age = 20 },
                new NameItem { Name = "Jane", Age = 21 },
                new NameItem { Name = "Davie", Age = 22 },
                new NameItem { Name = "Robert", Age = 23 }
            };
        }
    }
}
命名空间内容PresenterIndex
{
公共类名称项
{
公共字符串名称{get;set;}
公共整数{get;set;}
}
公共部分类主窗口:窗口
{
公共ObservableCollection名称列表{get;set;}
公共主窗口()
{
初始化组件();
DataContext=this;
名称列表=新的ObservableCollection
{
新名称项目{Name=“John”,年龄=20},
新名称项{Name=“Jane”,年龄=21},
新名称项目{Name=“Davie”,年龄=22},
新名称项目{Name=“Robert”,年龄=23}
};
}
}
}


 <ItemsControl.ItemContainerStyle>
                <Style TargetType="{x:Type ContentPresenter}">
                    <Setter Property="Grid.Row" Value="{Binding Path=(ItemsControl.AlternationIndex), RelativeSource={RelativeSource Self}}" />
                </Style>
            </ItemsControl.ItemContainerStyle>