从代码隐藏访问ListBoxItem控件

时间:2011-03-29 13:24:37

标签: silverlight listbox

在我的Silverlight 4应用程序中,我有一个列表框,我为其创建了一个itemtemplate:

    <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的列表,但似乎没有办法从那里获取控件。无论如何可以帮我解决这个问题吗?

提前致谢,
弗兰克

1 个答案:

答案 0 :(得分:2)

从此博客获取小VisualTreeEnumeration块代码:Visual Tree Enumeration

现在您可以使用以下代码找到“TextBlockCharacteristicName”元素: -

foreach (var textBlock in ListBoxCharacteristics.Descendents()
    .OfType<TextBlock>()
    .Where(t => t.Name == "TextBlockCharacteristicName") )
{
    // Do stuff with each Text block.
}