我在XAML中有以下列表:
<ListView Name="ListViewBack"
Margin="3"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ItemsPanel="{StaticResource IconListPanelTemplate}"
ItemTemplate="{StaticResource IconListDataTemplate}">
</ListView>
现在我希望能够将ItemsPanel和ItemTemplate从List更改为Grid版本。我已经尝试使用以下代码:
ListViewBack.ItemsPanel = Resources["IconGridPanelTemplate"] as ItemsPanelTemplate;
ListViewBack.ItemTemplate = Resources["IconGridDataTemplate"] as DataTemplate;
但是在被驱逐时没有任何反应。
有什么想法吗?
谢谢!
答案 0 :(得分: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()
。
答案 1 :(得分:0)
您需要设置ListView.View的样式,而不是ListView本身。 有关示例,请查看ViewBase Class的文档。