2009-11-14 9 views
1

J'ai une classe ItemsControl qui remplace les méthodes suivantes:Modèle de données non injectée dans ItemContainer

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

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

J'ai fourni le modèle pour TilePanelItem qui est le conteneur de 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> 

Et le Style pour cela:

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

Enfin l'instance de mon ItemsControl avec le 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> 

Le DataTemplate que je définissais n'est pas injecté dans ItemContainer. Quand je cours l'application, elle montre les frontières que j'ai déclarées dans le modèle ItemContainter mais je ne vois pas le DataTemplate.

Qu'est-ce qui me manque?

Merci un million

+0

Pouvez-vous envoyer votre code de TilePanelItem –

Répondre

0

Vous devez apporter le ItemsTemplate pour devenir ContentTemplate du 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>