绑定ItemsControl中项的ZIndex

时间:2014-04-17 21:55:19

标签: xaml windows-runtime caliburn.micro itemscontrol

使用Caliburn.Micro作为WinRT应用程序,我想控制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包含一个属性Parts:

    private BindableCollection<IPartViewModel> _parts = new BindableCollection<IPartViewModel>();
    public BindableCollection<IPartViewModel> Parts
    {
        get { return _parts; }
        set { _parts = value; NotifyOfPropertyChange(() => Parts); }
    }

IPartViewModel有不同的实现,每个实现都有自己的View(=自定义用户控件)。 IPartViewModel的每个实现都有一个ZIndex属性,可以绑定。

所有其他绑定(标签,tapped事件......)都能很好地工作,但我无法弄清楚绑定应该是什么样子来控制ZIndex。

关于SO的许多其他问题都涉及这个问题,但WinRT没有。

1 个答案:

答案 0 :(得分:2)

我最终使用自定义ItemsControl实现了这一点并覆盖了GetContainerForItemOverride方法,其中我返回了一个添加了ZIndex属性的ContentPresenter

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