tags:

views:

56

answers:

1

I have an ItemsControl class that overrides the following methods

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

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

I provided the template for TilePanelItem which is the container of 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>

And the style for it

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

  And finally the instance of my ItemsControl with 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>

The data template that I defined is not injected in ItemContainer.When I run the app, it shows the borders as I declared in ItemContainter Template but I don't see the Data Template. What am I missming Thanks a million

A: 

You need to bring the ItemsTemplate in to become the ContentPresenter's ContentTemplate:

<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>
Ray Burns