1

I have the following list in XAML:

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

Now I would like to be able to change the ItemsPanel and ItemTemplate from the List to the Grid version. I've tried this using the following code:

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

But nothing happens when excecuted.

Any idea's?

Thanks!

4

2 回答 2

3

您明显的问题是您使用Resources[]的是FindResource(). 通常,Resources[]仅当您的资源在this.Resources字典中而不是在其他地方时才有效。

这就是我将如何重写你的两行代码:

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

实际上,我更有可能为此使用触发器或使用 DynamicResource 和交换资源字典,但这是另一回事。

请注意,我打电话ListViewBack.FindResource()而不是仅仅打电话FindResource()。这是在低于 UserControl 级别的资源字典中重新定义 IconGridPanelTemplate 的情况。如果这永远不可能,您可以简单地调用FindResource().

于 2010-04-11T06:43:22.737 回答
0

您需要设置 ListView.View 的样式,而不是 ListView 本身。查看ViewBase 类的文档以获取示例。

于 2010-04-12T00:04:28.777 回答