Ширина элементов в ItemsControl - PullRequest
3 голосов
/ 21 августа 2010

У меня есть ItemsControl с DataTemplate, который связан с ObservableCollection целых чисел.

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

И в ресурсах Windows:

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

Моя проблема в том, что в коде мне нужно иметь возможность определять ширину TextBlocks (или каков бы ни был элемент, если я изменю его позже) в ItemsControl. У кого-нибудь есть идеи как это сделать?

Когда я выполняю DimsContainer.Items [i], он дает мне связанный элемент, а не TextBlock.

1 Ответ

4 голосов
/ 21 августа 2010

Вместо этого вы можете использовать:

DimsContainer.ItemContainerGenerator.ContainerFromIndex(i);

Это не даст вам сам TextBlock, но даст вам сгенерированный ContentPresenter, который обернут вокруг него ItemsControl для хранения ItemTemplate.

...