Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF在代码隐藏中更改ItemsPanel和ItemTemplate_Wpf_Itemtemplate_Itemspanel - Fatal编程技术网

WPF在代码隐藏中更改ItemsPanel和ItemTemplate

WPF在代码隐藏中更改ItemsPanel和ItemTemplate,wpf,itemtemplate,itemspanel,Wpf,Itemtemplate,Itemspanel,我在XAML中有以下列表: <ListView Name="ListViewBack" Margin="3" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ItemsPanel="{StaticResource IconListPanelTemplate}" ItemTemplate="{StaticResource IconListDataTemp

我在XAML中有以下列表:

<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");