Ссылка на элемент в VirtualizingStackPanel - PullRequest
0 голосов
/ 09 марта 2012

Я играю с "Grid Application", который представляет собой шаблон приложения C ++ Metro, предоставляемый VS11. Основной экран представляет собой набор элементов, отображаемых в VirtualizingStackPanel:

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

Фактические элементы отображаются с использованием шаблона данных Standard250x250ItemTemplate, определенного в StandardStyles.xaml. Одним из элементов отображения является графический элемент.

Я пытаюсь понять, как ссылаться на определенный элемент, чтобы я мог изменить графику во время выполнения. ScrollViewer и GridView имеют связанные с ними объекты, так что я могу добраться до них, но я не вижу, как добраться оттуда до отдельных элементов.

Все эти вещи совершенно новые для меня, так что будьте осторожны. :)

1 Ответ

0 голосов
/ 09 марта 2012

В целом, не рекомендуется копаться в отдельных шаблонных элементах в ItemsControl, потому что это не только боль, но и то, что ItemTemplate может регенерировать в разное время (подкачка во время виртуализации, обновления исходной коллекции и т. Д.), И вы 'останется с устаревшим элементом UIE, который больше не отображается.

Лучший подход - перенести необходимые данные в данные элемента, а в ItemTemplate использовать привязку данных, чтобы внести любые изменения, необходимые для дифференциации интерфейса пользователя.,Одним из вариантов является использование IValueConverter для получения другого изображения в зависимости от некоторого состояния в данных элемента:

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

Здесь я предполагаю, что код преобразователя был написан, а экземпляр преобразователя ужеобъявлен ресурсом ( см. здесь ).В качестве альтернативы вы можете выполнить прямую привязку к свойству данных каждого элемента, которое указывает его изображение, и пропустить часть конвертера.

...