Я создал пользовательскую панель, унаследованную от Canvas. Я хотел бы использовать его для просмотра своих пользовательских элементов управления в ItemsControl.
Это мой XAML:
<ItemsControl ItemsSource="{Binding Groups}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<c:MyCustomPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<ItemContainerTemplate>
<app:MyUserControl Margin="5" MinWidth="200"/>
</ItemContainerTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Как видите, для моего пользовательского элемента управления MinWidth установлено на 200.
Теперь в моей пользовательской панели есть переопределенный метод ArrangeOverride:
protected override Size ArrangeOverride(Size arrangeSize)
{
foreach (UIElement obj in InternalChildren)
{
//some other code
}
return arrangeSize;
}
Проблема в том, что по какой-то причине InternalChildren состоят из элементов ContentPresenter вместо моих пользовательских элементов управления. Конечно, в каждом ContentPresenter есть мой пользовательский элемент управления, но это не то, чем я хотел бы быть. Мне нужно прочитать здесь MinWidth моего userControl, но вместо этого я читаю его из ContentPresenter (который всегда равен 0).
Когда я делаю очень простой тест:
<ItemsControl ItemsSource="{Binding Buttons}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<c:MyCustomPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
где Buttons - это просто список элементов управления Button, все работает как положено. Поэтому я думаю, что проблема может быть где-то в том, как я использую ItemsControl. Но понятия не имею, как его починить.