UserControl
- это ContentControl
, которое имеет свойство Content
и обычно отображает его в соответствии с ContentTemplate
. Я веду к тому, что в UserControl
есть 1 предмет. Конечно, вы можете добавить свойство Children
к вашему UserControl
и обрабатывать добавление / удаление вложенных элементов в некоторые внутренние Grid
в вашем контроле, но это не то, для чего предназначены элементы управления контентом.
Для размещения многих предметов вы должны использовать подкласс Panel
, например Grid
, как вы упомянули. Все панели имеют свойство Children
со списком элементов, расположенных на них. Вы можете унаследовать Grid
и разместить там некоторое поведение. Например. Вы можете сделать свойство расширения MyGrid.Collapsed
, установить его для элементов в вашей сетке, чтобы оно могло расположить их позиции.
Другим вариантом является создание подкласса ItemsControl
. Элементы, помещенные в него, будут отображаться в соответствии с его шаблоном ItemsPanel
. Этот подход также дает вам преимущество свойства ItemsSource
, которое можно использовать для отображения списка произвольных типов данных, генерируя из них элементы с использованием свойства ItemTemplate
.