Silverlight不支持ItemsControl中的交替项模板.关于如何实现这一点,我有一些想法,但为了避免污染潜在的答案,我会把它们排除在外.
这个想法与普通的ItemTemplate相同,因为它不依赖于绑定数据上下文中的任何东西来运行.我希望功能保留在视图中(假设MVVM)
如果您必须为ItemsControl设计一种提供交替模板(我的意思是完整数据模板)的方法,您将如何实现这一目标?
解决方法
扩展ItemsControl并在PrepareContainerForItemOverride覆盖中,您可以应用交替模板.
protected override void PrepareContainerForItemOverride(DependencyObject element,object item) { if (!object.ReferenceEquals(element,item)) { ContentPresenter presenter = element as ContentPresenter; ContentControl control = null; if (presenter == null) { control = element as ContentControl; if (control == null) { return; } } DataTemplate itemTemplate = null; if ((this.ItemTemplate != null) && (this.DisplayMemberPath != null)) { throw new InvalidOperationException("Cannot set ItemTemplate and DisplayMemberPath simultaneously"); } if (!(item is UIElement)) { if (this.ItemTemplate != null) { if(this.AlternateItemTemplate != null && ((alternationIndex % 2)) == 1) itemTemplate = this.AlternateItemTemplate; else itemTemplate = this.ItemTemplate; alternationIndex++; } } if (presenter != null) { if (itemTemplate != null) { presenter.Content = item; presenter.ContentTemplate = itemTemplate; } else { presenter.SetBinding(ContentControl.ContentProperty,new Binding(this.DisplayMemberPath)); } } else { control.Content = item; control.ContentTemplate = itemTemplate; } } }
我使用alternationIndex的方式不是很准确,需要更改,但否则这应该有效.