我正在使用“网格应用程序”,它是由VS11提供的C++ Metro应用程序模板。主显示是在VirtualizingStackPanel中显示的项的集合:
<ScrollViewer x:name="itemGridScrollViewer">
<GridView x:name="itemGridView">
<GridView.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</GridView.ItemsPanel>
</GridView>
</ScrollViewer>实际项目使用StandardStyles.xaml中定义的Standard250x250ItemTemplate数据模板显示。其中一个显示元素是图形。
我正在尝试理解如何引用特定的项,这样我就可以在运行时更改图形。ScrollViewer和GridView都有与之关联的对象,所以我可以访问这些对象,但我不知道如何从那里访问各个项。
所有这些东西对我来说都是全新的,所以要温柔点。:)
发布于 2012-03-10 02:33:53
一般来说,深入研究ItemsControl中的单个模板项并不是一个好主意,因为这不仅很痛苦,而且ItemTemplate可能会在不同的时间重新生成(虚拟化过程中的分页、源代码集合更新等),而您将持有一个不再显示的过时的UIElement。
一种更好的方法是将所需的数据放入项数据中,并在ItemTemplate中使用数据绑定来进行区分UI所需的任何更改。一种选择是使用IValueConverter来获取不同的图像,这取决于项目数据中的某些状态:
<GridView>
<GridView.ItemTemplate>
<DataTemplate>
<Image Source="{Binding Path=DataState, Converter={StaticResource MyStateToImageConverter}}"/>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>在这里,我假设已经编写了转换器代码,并且已经将转换器的一个实例声明为资源(see here)。或者,您也可以直接绑定到每个项的数据上指定其图像的属性,并跳过转换器部分。
https://stackoverflow.com/questions/9624331
复制相似问题