使用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>
绑定到上面视图的视图模型包含一个属性Parts:
private BindableCollection<IPartViewModel> _parts = new BindableCollection<IPartViewModel>();
public BindableCollection<IPartViewModel> Parts
{
get { return _parts; }
set { _parts = value; NotifyOfPropertyChange(() => Parts); }
}
IPartViewModel有不同的实现,每个实现都有自己的View(=自定义用户控件)。IPartViewModel的每个实现都有一个ZIndex属性,可以进行绑定。
所有其他绑定(标签、taped事件…)都能很好地工作,但我不知道控制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;
}