Windows 8 如何访问metro应用程序中listbox的datatemplate中的控件?
我正在开发一个Windows8Metro应用程序,其中的listbox包含一组文本块和一个图像Windows 8 如何访问metro应用程序中listbox的datatemplate中的控件?,windows-8,windows-store-apps,winrt-xaml,datatemplate,Windows 8,Windows Store Apps,Winrt Xaml,Datatemplate,我正在开发一个Windows8Metro应用程序,其中的listbox包含一组文本块和一个图像 <ListBox x:Name="lstbxbStudents" Background="Transparent" ItemContainerStyleSelector="{StaticResource ItemStyleSelector}" ScrollViewer.VerticalScrollBarVisibility="Auto" ItemTemplate="{StaticResourc
<ListBox x:Name="lstbxbStudents" Background="Transparent" ItemContainerStyleSelector="{StaticResource ItemStyleSelector}" ScrollViewer.VerticalScrollBarVisibility="Auto" ItemTemplate="{StaticResource LandscapeItemTemplate}" Height="476" SelectionChanged="lstbxbProducts_SelectionChanged_1" Style="{StaticResource ListBoxStyle1}" HorizontalAlignment="Left" Width="901">
</ListBox>
对于该图像ImgCmt,我在列表框的datatemplate中设置了图像静态的源
<Page.Resources>
<CollectionViewSource x:Name="cvs2" IsSourceGrouped="true" />
<!-- TODO: Delete this line if the key AppName is declared in App.xaml -->
<x:String x:Key="AppName">Students Screen</x:String>
<DataTemplate x:Key="LandscapeItemTemplate" >
<StackPanel Orientation="Horizontal">
<StackPanel Width="30"></StackPanel>
<StackPanel Width="120" Orientation="Horizontal">
<TextBlock Text="{Binding stunum}" VerticalAlignment="Center" HorizontalAlignment="Left" />
</StackPanel>
<StackPanel Width="350">
<TextBlock Text="{Binding studsc}" HorizontalAlignment="Left" />
</StackPanel>
<StackPanel Width="10"></StackPanel>
<StackPanel Width="100">
<TextBlock Text="{Binding stuum}" x:Name="txtblkstuum" HorizontalAlignment="Left" />
</StackPanel>
<StackPanel Width="150">
<TextBlock Text="{Binding stugrp}" VerticalAlignment="Center" TextAlignment="Right" HorizontalAlignment="Center" />
</StackPanel>
<StackPanel Width="100">
<TextBlock Text="{Binding stusection, Mode=TwoWay}" TextAlignment="Center" x:Name="txtbxbstusection" Tag="{Binding stunum}" VerticalAlignment="Center" HorizontalAlignment="Right" />
</StackPanel>
<StackPanel Width="50"></StackPanel>
<StackPanel>
<Image Source="Assets/comments.png" Name="ImgCmt" PointerPressed="Image_PointerPressed_1" VerticalAlignment="Center" Width="20" Height="20"></Image>
</StackPanel>
</StackPanel>
</DataTemplate>
</Page.Resources>
学生屏幕
我的目标是,在某种情况下,我需要访问metro应用程序中listbox的datatemplate中的控件时,我想在codebehind depnding中将图像源更改为不同的图像源(更改图像)
我如何做到这一点:
这是一个常见的问题。我们都至少问过一次。问题是这些控件没有唯一的名称,因为它们位于中继器中。因此,您不能在XAML中使用逻辑树。逻辑树就是让你按名字来称呼事物的东西。相反,您需要在XAML中使用可视化树。可视化树允许您访问屏幕上的所有内容,包括装饰控件和填充中继器的动态渲染元素。因为可视化树非常大,而且中继器重复,所以您仍然必须约束可视化树的范围,以便能够可靠地找到要查找的控件。我希望这是有道理的
此处的解决方案:标记正确答案被认为是礼貌的。