0

VS11が提供するC++Metroアプリテンプレートである「グリッドアプリケーション」で遊んでいます。メインディスプレイは、VirtualizingStackPanelに表示されるアイテムのコレクションです。

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

実際のアイテムは、StandardStyles.xamlで定義されているStandard250x250ItemTemplateデータテンプレートを使用して表示されます。これの表示要素の1つはグラフィックです。

実行時にグラフィックを変更できるように、特定のアイテムを参照する方法を理解しようとしています。ScrollViewerとGridViewにはオブジェクトが関連付けられているので、それらにアクセスできますが、そこから個々のアイテムに移動する方法がわかりません。

これらはすべて私にとってまったく新しいものなので、優しくしてください。:)

4

1 に答える 1

0

一般に、ItemsControl でテンプレート化された個々の項目を掘り下げることはお勧めできません。これは面倒なだけでなく、ItemTemplate がさまざまな時点 (仮想化中のページング、ソース コレクションの更新など) で再生成される可能性があり、取り残されてしまうからです。表示されなくなった古い UIElement を保持しています。

より良いアプローチは、必要なデータを項目データに取り込み、ItemTemplate でデータ バインディングを使用して、UI を区別するために必要な変更を行うことです。1 つのオプションは、IValueConverter を使用して、項目データの状態に応じて異なる画像を取得することです。

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

ここでは、コンバーター コードが記述されており、コンバーターのインスタンスが既にリソースとして宣言されていると想定しています (こちらを参照)。または、各アイテムのデータのプロパティに直接 Binding を実行して、そのイメージを指定し、コンバーター部分をスキップすることもできます。

于 2012-03-09T18:33:53.290 に答える