Шаблон данных не внедрен в ItemContainer - PullRequest
1 голос
/ 14 ноября 2009

У меня есть класс ItemsControl, который переопределяет следующие методы:

protected override bool IsItemItsOwnContainerOverride(object item)
{
    return item is TilePanelItem;
}

protected override DependencyObject GetContainerForItemOverride()
{
    return new TilePanelItem();
}

Я предоставил шаблон для TilePanelItem, который является контейнером ItemsControl:

<ControlTemplate x:Key="tileItemTemplate" TargetType="my:TilePanelItem">
    <Grid Width="200" Height="100">
        <Border BorderBrush="Black" BorderThickness="2">
            <ContentPresenter RenderTransformOrigin=".5,.5" />    
        </Border>
    </Grid>
</ControlTemplate>

И Style для него:

<Style TargetType="my:TilePanelItem">
    <Setter Property="Template" Value="{StaticResource tileItemTemplate}" />
</Style>

И, наконец, экземпляр моего ItemsControl с DataTemplate:

<my:TileItemsControl x:Name="tileControl" ItemsSource="{Binding}" >
    <my:TileItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel />
        </ItemsPanelTemplate>
    </my:TileItemsControl.ItemsPanel>
    <my:TileItemsControl.ItemTemplate>
        <DataTemplate>
            <Border Background="Blue">
                <TextBlock Text="here I am" />
            </Border>
        </DataTemplate>
    </my:TileItemsControl.ItemTemplate>
</my:TileItemsControl>

Определенный мной DataTemplate не вводится в ItemContainer. Когда я запускаю приложение, оно показывает границы, как я объявил в шаблоне ItemContainter, но я не вижу DataTemplate.

Чего мне не хватает?

Спасибо за миллион

1 Ответ

0 голосов
/ 15 ноября 2009

Вам необходимо ввести шаблон ItemsTemplate, чтобы он стал ContentTemplate ContentPresenter:

<ControlTemplate x:Key="tileItemTemplate" TargetType="my:TilePanelItem">
  <Grid Width="200" Height="100">
    <Border BorderBrush="Black" BorderThickness="2">
      <ContentPresenter RenderTransformOrigin=".5,.5"
        ContentTemplate="{Binding ItemsTemplate, RelativeSource={RelativeSource FindAncestor,my:TileItemsControl,1}}" />
    </Border>
  </Grid>
</ControlTemplate>
...