Xaml 绑定ItemsControl中项目的ZIndex

Xaml 绑定ItemsControl中项目的ZIndex,xaml,windows-runtime,caliburn.micro,itemscontrol,Xaml,Windows Runtime,Caliburn.micro,Itemscontrol,在WinRT应用程序中使用Caliburn.Micro,我想控制ItemsControl中显示的项目的ZIndex。 当用户点击一个项目时,它应该成为最上面的元素 <ItemsControl Background="White" Height="auto" Width="auto" x:Name="Parts" HorizontalAlignment="Left" VerticalAlignment=

在WinRT应用程序中使用Caliburn.Micro,我想控制ItemsControl中显示的项目的ZIndex。 当用户点击一个项目时,它应该成为最上面的元素

        <ItemsControl Background="White" Height="auto" Width="auto"  x:Name="Parts"
                  HorizontalAlignment="Left"
                  VerticalAlignment="Top" 
                      >
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                        <Canvas></Canvas>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
        </ItemsControl>

绑定到上面视图的viewmodel包含一个属性部分:

    private BindableCollection<IPartViewModel> _parts = new BindableCollection<IPartViewModel>();
    public BindableCollection<IPartViewModel> Parts
    {
        get { return _parts; }
        set { _parts = value; NotifyOfPropertyChange(() => Parts); }
    }
private BindableCollection\u parts=new BindableCollection();
公共可绑定集合部件
{
获取{return\u parts;}
设置{u parts=value;NotifyOfPropertyChange(()=>parts);}
}
IPartViewModel有不同的实现,每个实现都有自己的视图(=自定义用户控件)。 IPartViewModel的每个实现都有一个ZIndex属性,可以绑定

所有其他绑定(标签、点击事件等)都能很好地工作,但我不知道该绑定应该是什么样子来控制ZIndex


关于SO的许多其他问题都解决了这个问题,但WinRT没有任何问题。

我最终通过一个自定义ItemsControl实现了这一点,并重写了GetContainerForItemOverride方法,在该方法中,我返回了一个ContentPresenter,并在ZIndex属性中添加了一个绑定

protected override DependencyObject GetContainerForItemOverride()
        {
            var cp = new ContentPresenter();
            cp.SetBinding(Canvas.ZIndexProperty, new Binding { Path = new PropertyPath("ZIndex") });
            return cp;
        }