2012-03-08 29 views
0

我正在玩“Grid Application”,它是由VS11提供的C++ Metro应用程序模板。主显示器处于VirtualizingStackPanel显示的项目的集合:使用在StandardStyles.xaml定义的Standard250x250ItemTemplate数据模板被显示引用VirtualizingStackPanel中的项目

<ScrollViewer x:name="itemGridScrollViewer"> 
    <GridView x:name="itemGridView"> 
    <GridView.ItemsPanel> 
     <ItemsPanelTemplate> 
     <VirtualizingStackPanel /> 
     </ItemsPanelTemplate> 
    </GridView.ItemsPanel> 
    </GridView> 
</ScrollViewer> 

的实际项目。其中一个显示元素是图形。

我想了解如何引用特定项目,以便我可以在运行时更改图形。 ScrollViewer和GridView具有与它们相关的对象,所以我可以找到它们,但我不知道如何从那里获取到各个项目。

所有这些对我来说都是全新的,所以要温柔。 :)

回答

0

一般来说,深入研究ItemsControl中的单个模板化项目并不是一个好主意,因为这不仅是一种痛苦,而且ItemTemplate可以在不同时间重新生成(虚拟化期间的分页,源集合更新等)并且你将留下一个不再显示的过时的UIElement。

更好的方法是将需要的数据拖放到项目数据中,并在ItemTemplate中使用数据绑定来进行区分UI所需的任何更改。一种选择是使用的IValueConverter取决于项目数据的一些状态,以获得不同的图像:

<GridView> 
    <GridView.ItemTemplate> 
    <DataTemplate> 
     <Image Source="{Binding Path=DataState, Converter={StaticResource MyStateToImageConverter}}"/> 
    </DataTemplate> 
    </GridView.ItemTemplate> 
</GridView> 

在这里,我假设转换器的代码已被写入和转换器的实例已经宣布作为资源(see here)。您也可以直接绑定到指定其图像的每个项目数据的属性并跳过转换器部分。

相关问题