Windows 8 在虚拟化面板中引用项目 我正在玩网格应用程序,它是VS11提供的C++ Metro应用程序模板。主显示是显示在虚拟化面板中的项目集合: <ScrollViewer x:name="itemGridScrollViewer"> <GridView x:name="itemGridView"> <GridView.ItemsPanel> <ItemsPanelTemplate> <VirtualizingStackPanel /> </ItemsPanelTemplate> </GridView.ItemsPanel> </GridView> </ScrollViewer>

Windows 8 在虚拟化面板中引用项目 我正在玩网格应用程序,它是VS11提供的C++ Metro应用程序模板。主显示是显示在虚拟化面板中的项目集合: <ScrollViewer x:name="itemGridScrollViewer"> <GridView x:name="itemGridView"> <GridView.ItemsPanel> <ItemsPanelTemplate> <VirtualizingStackPanel /> </ItemsPanelTemplate> </GridView.ItemsPanel> </GridView> </ScrollViewer>,windows-8,microsoft-metro,virtualizingstackpanel,Windows 8,Microsoft Metro,Virtualizingstackpanel,使用StandardStyles.xaml中定义的Standard250x250ItemTemplate数据模板显示实际项目。其中一个显示元素是图形 我试图了解如何引用特定项,以便在运行时更改图形。ScrollViewer和GridView都有与之关联的对象,因此我可以访问这些对象,但我不知道如何从那里访问单个项目 所有这些东西对我来说都是全新的,所以要温柔 一般来说,深入研究ItemsControl中的单个模板项不是一个好主意,因为这不仅是一件痛苦的事情,而且ItemTemplate可以在虚拟

使用StandardStyles.xaml中定义的Standard250x250ItemTemplate数据模板显示实际项目。其中一个显示元素是图形

我试图了解如何引用特定项,以便在运行时更改图形。ScrollViewer和GridView都有与之关联的对象,因此我可以访问这些对象,但我不知道如何从那里访问单个项目


所有这些东西对我来说都是全新的,所以要温柔

一般来说,深入研究ItemsControl中的单个模板项不是一个好主意,因为这不仅是一件痛苦的事情,而且ItemTemplate可以在虚拟化、源集合更新等过程中的不同时间重新生成,并且您将保留一个不再显示的过时UIElement

更好的方法是将所需的数据拉入项数据,并在ItemTemplate中使用数据绑定来进行区分UI所需的任何更改。一个选项是使用IValueConverter根据项目数据中的某些状态获取不同的图像:

<GridView>
  <GridView.ItemTemplate>
    <DataTemplate>
      <Image Source="{Binding Path=DataState, Converter={StaticResource MyStateToImageConverter}}"/>
    </DataTemplate>
  </GridView.ItemTemplate>
</GridView>
这里我假设转换器代码已经编写,并且转换器的一个实例已经声明为资源。您也可以直接绑定到每个项目数据上指定其图像的属性,并跳过转换器部分