Доступ к ListBoxItem-Controls из кода - PullRequest
1 голос
/ 29 марта 2011

в моем приложении Silverlight 4 у меня есть список, для которого я создал шаблон элемента:

    <DataTemplate x:Key="ItemTemplate">
        <Grid Background="{StaticResource BrushCharacteristicListBoxItemBackground}">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="10"/>
                <ColumnDefinition Width="Auto"/>
            </Grid.ColumnDefinitions>
            <TextBlock x:Name="TextBlockCharacteristicName" Text="{Binding Name}" TextTrimming="WordEllipsis" ToolTipService.ToolTip="{Binding Name}" Margin="6,0,2,0" VerticalAlignment="Center" HorizontalAlignment="Left" />
            <TextBlock x:Name="TextBlockSeperator" Text="=" Grid.Column="1" VerticalAlignment="Center" />
            <Border Grid.Column="2" HorizontalAlignment="Right" Margin="2,2,6,2" Background="{Binding FunctionState, Converter={StaticResource ConvertCharacteristicFunctionState2Color}}">
                <TextBlock x:Name="TextBlockCharacteristicValue" Text="{Binding CalculatedValue, Converter={StaticResource ConvertDouble2Display}}" Padding="2,0" Foreground="{StaticResource BrushCharacteristicListBoxItemBackground}" ToolTipService.ToolTip="{Binding ValueOrFunc}" MaxWidth="72"/>
            </Border>
        </Grid>
    </DataTemplate>     

Теперь я хочу получить доступ к элементам управления, определенным в шаблоне (то есть TextBlockCharacteristicName) из кода ниже. Мне нужно это, чтобы вручную адаптировать размер элементов управления, что нельзя сделать другим способом.

Я подключился к событию LayoutUpdated, но не нашел способа получить доступ к элементам управления. Я попробовал это с

((StackPanel)ListBoxCharacteristics.GetItemsHost()).Children

, который дает мне список ListBoxItems, но, похоже, нет никакого способа получить оттуда элементы управления. В любом случае может помочь мне с этой проблемой?

Заранее спасибо,
Frank

1 Ответ

2 голосов
/ 29 марта 2011

Получите небольшой фрагмент кода VisualTreeEnumeration из этого блога: Перечисление Visual Tree .

Теперь вы можете найти элементы "TextBlockCharacteristicName" с этим кодом: -

foreach (var textBlock in ListBoxCharacteristics.Descendents()
    .OfType<TextBlock>()
    .Where(t => t.Name == "TextBlockCharacteristicName") )
{
    // Do stuff with each Text block.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...