WPF ItemsControl привязан к UserControls

Привязка ItemsControl к коллекции объектов UserControl работает нормально. Однако я хотел бы применить дополнительный XAML, например Border и т. д.

Однако вместо Border с UserControl отображается только сам UserControl. <ItemsControl.ItemTemplate>, похоже, не имеет никакого эффекта.

Вопрос: Как создать ItemTemplate с дополнительным XAML? В настоящее время этот тег, похоже, «игнорируется».


Модель просмотра: ObservableCollection<UserControl> MyUserControls

<ItemsControl ItemsSource="{Binding MyUserControls, lementName=popupContainer}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Grid />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Border ...>
                <ContentControl Content="{Binding}" />
            </Border>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
0
90
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Взгляд на справочный источник показывает, что метод IsItemItsOwnContainerOverride класса ItemsControl имеет следующую реализацию:

protected virtual bool IsItemItsOwnContainerOverride(object item)
{
    return (item is UIElement);
}

Таким образом, если вы передаете коллекцию UIElement в ItemsSource элемента управления ItemsControl, эти элементы используются непосредственно как контейнеры элементов без обычной обертки внутри ContentPresenter. Следовательно, ItemTemplate вообще не применяется.

Итак, ответ на вопрос

How can I design an ItemTemplate with additional XAML?

есть: Вовсе нет, если ItemsSource представляет собой набор UIElements.

Вместо этого следует следовать основной идее класса ItemsControl и назначить коллекцию объекты элемента данных свойству ItemsSource. Затем выберите соответствующие элементы управления пользовательского интерфейса с помощью DataTemplates, у которых свойство DataType установлено для типов различных элементов данных.


Или вы создаете производный ItemsControl, который переопределяет метод IsItemItsOwnContainerOverride:

public class MyItemsControl : ItemsControl
{
    protected override bool IsItemItsOwnContainerOverride(object item)
    {
        return false;
    }
}

Спасибо за ваш потрясающий ответ! Он охватывает оба варианта: 1.) Создание пользовательского класса ItemsControl; 2.) Рассматриваем возможность использования привязок над UserControls. Однако я не понимаю, почему этот параметр запрещает это по умолчанию или почему для этого нет общедоступного DependencyProperty. Поскольку это так, я приму решение на основе данных фактов. Спасибо!

bytecode77 22.05.2019 16:54

Другие вопросы по теме