首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >引用VirtualizingStackPanel中的项

引用VirtualizingStackPanel中的项
EN

Stack Overflow用户
提问于 2012-03-09 04:22:04
回答 1查看 524关注 0票数 0

我正在使用“网格应用程序”,它是由VS11提供的C++ Metro应用程序模板。主显示是在VirtualizingStackPanel中显示的项的集合:

代码语言:javascript
复制
<ScrollViewer x:name="itemGridScrollViewer">
  <GridView x:name="itemGridView">
    <GridView.ItemsPanel>
      <ItemsPanelTemplate>
        <VirtualizingStackPanel />
      </ItemsPanelTemplate> 
    </GridView.ItemsPanel>
  </GridView>
</ScrollViewer>

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

我正在尝试理解如何引用特定的项,这样我就可以在运行时更改图形。ScrollViewer和GridView都有与之关联的对象,所以我可以访问这些对象,但我不知道如何从那里访问各个项。

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

EN

回答 1

Stack Overflow用户

发布于 2012-03-10 02:33:53

一般来说,深入研究ItemsControl中的单个模板项并不是一个好主意,因为这不仅很痛苦,而且ItemTemplate可能会在不同的时间重新生成(虚拟化过程中的分页、源代码集合更新等),而您将持有一个不再显示的过时的UIElement。

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

代码语言:javascript
复制
<GridView>
  <GridView.ItemTemplate>
    <DataTemplate>
      <Image Source="{Binding Path=DataState, Converter={StaticResource MyStateToImageConverter}}"/>
    </DataTemplate>
  </GridView.ItemTemplate>
</GridView>

在这里,我假设已经编写了转换器代码,并且已经将转换器的一个实例声明为资源(see here)。或者,您也可以直接绑定到每个项的数据上指定其图像的属性,并跳过转换器部分。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9624331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档