2012-03-08 59 views
0

我正在玩「Grid Application」,它是由VS11提供的C++ Metro應用程序模板。主顯示器處於VirtualizingStackPanel顯示的項目的集合:使用在StandardStyles.xaml定義的Standard250x250ItemTemplate數據模板被顯示引用VirtualizingStackPanel中的項目

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

的實際項目。其中一個顯示元素是圖形。

我想了解如何引用特定項目,以便我可以在運行時更改圖形。 ScrollViewer和GridView具有與它們相關的對象,所以我可以找到它們,但我不知道如何從那裏獲取到各個項目。

所有這些對我來說都是全新的,所以要溫柔。 :)

回答

0

一般來說,深入研究ItemsControl中的單個模板化項目並不是一個好主意,因爲這不僅是一種痛苦,而且ItemTemplate可以在不同時間重新生成(虛擬化期間的分頁,源集合更新等)並且你將留下一個不再顯示的過時的UIElement。

更好的方法是將需要的數據拖放到項目數據中,並在ItemTemplate中使用數據綁定來進行區分UI所需的任何更改。一種選擇是使用的IValueConverter取決於項目數據的一些狀態,以獲得不同的圖像:

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

在這裏,我假設轉換器的代碼已被寫入和轉換器的實例已經宣佈作爲資源(see here)。您也可以直接綁定到指定其圖像的每個項目數據的屬性並跳過轉換器部分。

相關問題