У меня есть элемент управления, который имеет подклассы от ItemsControl
, называемый WorkSheet
:
public sealed class WorkSheet : ItemsControl {
Его элементы должны быть WorkTiles
:
/// <inheritdoc />
protected override bool IsItemItsOwnContainerOverride(object item) {
return (item is WorkTile);
}
/// <inheritdoc />
protected override DependencyObject GetContainerForItemOverride() {
return new WorkTile();
}
Пока- настолько хорошо.Я хочу, чтобы WorkSheet
использовал Canvas
для представления WorkItems
, позиция определяется путем переопределения ArrangeOverride
, который вызывается, и позиции определяются правильно.Точная позиция определяется в переопределениях.Я довольно потерян в моделировании, все же.Я просто не могу заставить предметы появляться.В Generic.xaml я определил стили.Они работают, но не так, как должны:
<Style TargetType="{x:Type local:WorkSheet}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Border>
<ItemsPresenter />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate>
<ContentPresenter />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
Здесь, в значительной степени, в дереве презентаций, ItemsPresenter
является самым низким элементом.Субэлементы ItemsPresenter
никогда не появляются.Я также попытался вставить Canvas
в ControlTemplate
с IsItemsHost="true"
- опять же, без элементов.Кто-нибудь знает, что я делаю здесь неправильно?
Опять же, в качестве объяснения - я помещаю точку останова в обработчик кнопки на форме и использую визуализатор, чтобы увидеть визуальное дерево.Я получаю иерархию:
WorkSheet -> Border -> ItemsPresenter
... и ничего ниже.
Очевидно, это означает, что используется ControlTemplate
, но ItemsPanel
никогда не вызывается.