WPF在代码隐藏中更改ItemsPanel和ItemTemplate
我在XAML中有以下列表:WPF在代码隐藏中更改ItemsPanel和ItemTemplate,wpf,itemtemplate,itemspanel,Wpf,Itemtemplate,Itemspanel,我在XAML中有以下列表: <ListView Name="ListViewBack" Margin="3" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ItemsPanel="{StaticResource IconListPanelTemplate}" ItemTemplate="{StaticResource IconListDataTemp
<ListView Name="ListViewBack"
Margin="3"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ItemsPanel="{StaticResource IconListPanelTemplate}"
ItemTemplate="{StaticResource IconListDataTemplate}">
</ListView>
但过度时什么也不会发生
有什么想法吗
谢谢 您明显的问题是您使用的是
资源[]
,而不是FindResource()
。一般来说,Resources[]
仅当您的资源位于this.Resources
字典中时才起作用,其他地方则不起作用
以下是我将如何重写您的两行代码:
ListViewBack.ItemsPanel = (ItemsPanelTemplate)ListViewBack.FindResource("IconGridPanelTemplate");
ListViewBack.ItemTemplate = (DataTemplate)ListViewBack.FindResource("IconGridDataTemplate");
实际上,我更倾向于使用触发器或使用DynamicSource和swap资源字典来实现这一目的,但这是另一回事
注意,我调用了
ListViewBack.FindResource()
,而不仅仅是FindResource()
。这种情况下,IconGridPanelTemplate在UserControl级别以下的资源字典中重新定义。如果这永远不可能实现,只需调用FindResource()
您需要设置ListView.View的样式,而不是ListView本身。
有关示例,请查看文档中的
ListViewBack.ItemsPanel = (ItemsPanelTemplate)ListViewBack.FindResource("IconGridPanelTemplate");
ListViewBack.ItemTemplate = (DataTemplate)ListViewBack.FindResource("IconGridDataTemplate");