2010-08-20 4 views
3

J'ai un ItemsControl avec un DataTemplate qui est lié à une ObservableCollection d'entiers.Largeur des éléments dans ItemsControl

<ItemsControl Name="DimsContainer" ItemTemplate="{StaticResource DimensionsTemplate}"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Orientation="Horizontal"/> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
</ItemsControl> 

Et dans les ressources Windows:

<Window.Resources> 
    <DataTemplate x:Key="DimensionsTemplate" > 
     <TextBlock Text="{Binding}" 
         Padding="5" 
         VerticalAlignment="Center" 
         FontSize="32"/> 
    </DataTemplate> 
</Window.Resources> 

Mon problème est que dans le code, je dois être en mesure de déterminer la largeur des TextBlocks (ou quel que soit l'élément est si je change plus tard) dans ItemsControl. Est-ce que quelqu'un a une idée de comment faire cela? Lorsque je fais DimsContainer.Items [i] il me donne l'élément lié pas le TextBlock.

Répondre

4

Vous devriez pouvoir utiliser à la place:

DimsContainer.ItemContainerGenerator.ContainerFromIndex(i); 

Cela ne vous donnera pas le TextBlock lui-même, mais il vous donnera l'ContentPresenter produit qui est enroulé autour de lui par le ItemsControl pour contenir la ItemTemplate.

+0

Et comment puis-je obtenir la largeur de cela? – KrisTrip

+2

Compris, merci! ((FrameworkElement) (this.DimsContainer.ItemContainerGenerator.ContainerFromIndex (i))) .RedWidth; – KrisTrip

Questions connexes