ItemsControl不创建ContentPresenter

时间:2017-07-14 18:06:15

标签: wpf c#-4.0 mvvm

为什么我的ItemsControl不为每个项目创建ContentPresenter?我猜这是让我的项目不显示的原因(当我使用实时视觉树检查时,它们被设置为可见并且位于正确的位置)。我基本上重复使用上面在不同ItemsControl中运行的代码,并且在使用此问题搜索Google / Stackoverflow时我无法找到任何内容。我可以包含视图模型代码,但我不认为它是相关的,因为我在Live Property Explorer中看到了适当的值,并且可以看到每个WellContainer都在其适当的网格单元格中。

XAML:

public MyClass()
{
    this.WhenAnyValue(x => x.StripedImage)
        .ObserveOn(RxApp.TaskpoolScheduler)
        .Select(im => CreateBlurImage(im))
        .ToProperty(this, x => x.Filtered, out _filtered, scheduler:RxApp.MainThreadScheduler);
}

实时可视树检查:

enter image description here

1 个答案:

答案 0 :(得分:1)

ItemsControl旨在仅在必要时将项目包装在容器中,也就是说,当项目不符合自己的容器时。根据您的评论,我们发现WellContainer派生自Control,因此有资格成为其自己的容器 1 ,并且不包含在{{ 1}}。遗憾的是,无法直接控制此行为,但您可以继承ContentPresenter并覆盖ItemsControl.IsItemItsOwnContainerOverride方法以修改默认行为。

1 正如我们在ItemsControl source code中看到的那样,只有ItemsControl类型的商品才有资格成为它自己的容器。