gpt4 book ai didi

带有交替 ItemTemplate 的 Silverlight ItemsControl

转载 作者:行者123 更新时间:2023-12-04 02:59:00 25 4
gpt4 key购买 nike

Silverlight 不支持 ItemsControl 中的交替项模板。关于如何实现这一点,我有一些想法,但为了避免污染潜在的答案,我将把它们排除在外。

这个想法与普通的 ItemTemplate 相同,因为它不依赖于绑定(bind)数据上下文中的任何内容来运行。我希望功能保留在 View 中(假设 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 的方式不是很准确,需要更改,但除此之外它应该可以工作。

关于带有交替 ItemTemplate 的 Silverlight ItemsControl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2991357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com