渲染项目控件项目ContentPresenters彼此叠加

时间:2018-11-06 15:10:23

标签: c# wpf xaml

我有一个包含可观察集合属性的视图模型:

public ObservableCollection<ExplorerPane> Panes { get; set; } = new ObservableCollection<ExplorerPane>();

在与我的视图模型相对应的用户控件中,我使用Panes作为ItemsSource的{​​{1}},而仅使用ItemsControl来显示每个内容ContentPresenter

ExplorerPane

问题在于,我希望内容演示者将其窗格彼此呈现为 ,以便一次只能看到一个窗格。

我已经想到了以下解决方案:"Controls in the same cell of a Grid are rendered back-to-front. So a simple way to put one control on top of another is to put it in the same cell."

然后我的问题是如何使内容演示者位于网格的同一单元格中?

1 个答案:

答案 0 :(得分:1)

使用网格作为ItemsPanel:

<ItemsControl ItemsSource="{Binding Panes}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Grid/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>

不需要ItemTemplate,因为ItemsControl已经使用ContentPresenter作为项目容器。


但是,如果只想显示一个ExplorerPane,请向视图模型中添加一个CurrentPane属性,并通过

显示它
<ContentControl Content={Binding CurrentPane}"/>