2010-04-10 48 views
1

我在XAML以下列表:WPF更改ItemsPanel和ItemTemplate中的代碼背後

<ListView Name="ListViewBack" 
      Margin="3" 
      ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
      ItemsPanel="{StaticResource IconListPanelTemplate}" 
      ItemTemplate="{StaticResource IconListDataTemplate}"> 
</ListView> 

現在我想能夠在ItemsPanel和ItemTemplate中從列表中網格版本改變。我已經嘗試使用以下代碼:

ListViewBack.ItemsPanel = Resources["IconGridPanelTemplate"] as ItemsPanelTemplate; 
ListViewBack.ItemTemplate = Resources["IconGridDataTemplate"] as DataTemplate; 

但是在執行時沒有任何反應。

任何想法的?

謝謝!

回答

3

顯而易見的問題是,您正在使用Resources[]而不是FindResource()。一般而言,Resources[]只有在資源位於this.Resources字典中時纔可用,而不在其他位置。

這是我會怎樣改寫代碼的兩行:

ListViewBack.ItemsPanel = (ItemsPanelTemplate)ListViewBack.FindResource("IconGridPanelTemplate"); 
ListViewBack.ItemTemplate = (DataTemplate)ListViewBack.FindResource("IconGridDataTemplate"); 

NOTE:事實上,我會更傾向於使用觸發器或使用DynamicResource和交換的資源字典用於此目的,但這是另一個故事。

請注意,我叫ListViewBack.FindResource(),而不是隻有FindResource()。這是在IconGridPanelTemplate在UserControl級別下的資源字典中重新定義的情況。如果這永遠不可能,您可以簡單地致電FindResource()

0

您需要設置ListView.View的樣式,而不是ListView本身。 查看ViewBase Class的文檔以獲取示例。