Я создаю настраиваемый элемент управления с набором отображаемых объектов. Я хотел бы, чтобы это была оболочка с некоторыми элементами и внутренним разделом, в котором размещались другие элементы, определяемые потребителем элемента управления. По сути, я хочу, чтобы он использовался аналогично StackPanel, где пользователь создает его и добавляет элементы управления в раздел содержимого. У меня это в основном работает с одной вещью, которую я не могу понять. Вот свойство зависимости «Страницы», которое необходимо установить:
public static readonly DependencyProperty PagesProperty =
DependencyProperty.Register("Pages", typeof(IEnumerable<MyContentPage>), typeof(UC_ApplicationWindow),
new PropertyMetadata(new List<MyContentPage>()));
public IList<MyContentPage> Pages
{
get => (IList<MyContentPage>)GetValue(PagesProperty);
set => SetValue(PagesProperty, value);
}
Это код из потребительского окна этого элемента управления, который в настоящее время работает:
<graphicElements:UC_ApplicationWindow.Pages>
<x:Array Type="graphicElements:MyContentPage">
<graphicElements:MyContentPage>
<graphicElements:MyContentPage.Content>
...the contents of the page
</graphicElements:MyContentPage.Content>
</graphicElements:MyContentPage>
<graphicElements:MyContentPage>
<graphicElements:MyContentPage.Content>
...the contents of the page
</graphicElements:MyContentPage.Content>
</graphicElements:MyContentPage>
</x:Array>
</graphicElements:UC_ApplicationWindow.Pages>
В идеале я хотел бы иметь возможность просто установить несколько элементов для свойства Pages, не предоставляя ему массив, однако, если я попытаюсь сделать это напрямую, я получаю сообщение об ошибке «Указанное значение не может быть назначено. Ожидался следующий тип: "IList'1".' Я также хотел бы иметь возможность указывать содержимое страницы напрямую, как это делают большинство других элементов управления WPF, но когда я вынимаю свойство прямого содержимого, оно говорит: «Тип« MyContentPage »не поддерживает прямое содержимое». Вот как я в конечном итоге хотел бы, чтобы это выглядело так:
<graphicElements:UC_ApplicationWindow.Pages>
<graphicElements:MyContentPage>
...the contents of the page
</graphicElements:MyContentPage>
<graphicElements:MyContentPage>
...the contents of the page
</graphicElements:MyContentPage>
</graphicElements:UC_ApplicationWindow.Pages>
Как я уже сказал, в настоящее время это работает, и если это то, что мне нужно сделать, я могу, но это кажется немного неуклюжим, и у меня есть подозрение, что это могло бы работать лучше, но я не могу понять, как это сделать. У кого-нибудь есть волшебный ключ (ключи), которые я потерял?