在我的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的列表,但似乎没有办法从那里获取控件。无论如何可以帮我解决这个问题吗?
提前致谢,
弗兰克
答案 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.
}