Рендеринг ItemsControl item ContentPresenters друг на друга - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть модель представления, содержащая наблюдаемое свойство коллекции:

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

В пользовательском элементе управления, соответствующем моей модели представления, я использую Panes в качестве ItemsSource для ItemsControl и просто использую ContentPresenter для отображения содержимого каждого ExplorerPane:

<ItemsControl ItemsSource="{Binding Panes}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <ContentPresenter Content="{Binding}" />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

Суть в том, что я хочу, чтобы докладчики контента отображали свои панели друг над другом , чтобы за один раз был виден только один.

Я подумал о решении по следующим направлениям: "Элементы управления в одной и той же ячейке сетки отображаются задом наперед. Поэтому простой способ поместить один элемент управления поверх другого - поместить его в та же клетка. "

Тогда у меня вопрос: как мне сделать так, чтобы предъявители контента находились в одной ячейке сетки?

1 Ответ

0 голосов
/ 06 ноября 2018

Использование сетки в качестве ItemsPanel:

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

ItemTemplate не требуется, поскольку ItemsControl уже использует ContentPresenter в качестве контейнера элемента.


Однако, если вы хотите показать только одну ExplorerPane, добавьте свойство CurrentPane к вашей модели представления и покажите его как

<ContentControl Content={Binding CurrentPane}"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...