You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UWP TreeView的ItemTemplateSelector未执行问题求助

UWP TreeView ItemTemplateSelector 不生效的问题排查与解决

嘿,我一眼就揪出问题所在了——你犯了两个容易忽略的小错误,直接导致模板选择器完全没被触发:

1. TreeView 同时设置了 ItemTemplate 和 ItemTemplateSelector

UWP 的 TreeView 有个优先级规则:如果同时声明了 ItemTemplate 和 ItemTemplateSelector,ItemTemplate 会被优先使用,你的 ExplorerItemTemplateSelector 根本没机会执行。这就是为什么你移除Selector声明后,界面完全没变化——因为一直都是ItemTemplate在起作用!

2. ItemTemplateSelector 的资源Key拼写错误

你在TreeView里写的是 ExpolrerItemTemplateSelector(注意少了个字母'r'),但你在资源里定义的Key是 ExplorerItemTemplateSelector,这个拼写错误会导致系统找不到你的选择器资源,就算前面的问题解决了,Selector也不会生效。


修正后的代码

首先,把TreeView里的ItemTemplate整个删掉,然后修正拼写错误:

<TreeView x:Name="treeview" Grid.Row="2" 
          ItemsSource="{Binding storageFolders,Mode=OneWay}" 
          Style="{StaticResource TreeViewStyle1}" 
          ItemTemplateSelector="{StaticResource ExplorerItemTemplateSelector}" >
</TreeView>

额外优化建议(可选)

你现在的DataTemplate里直接嵌套了TreeViewItem,虽然能工作,但其实更规范的做法是让模板只包含内容部分,TreeView会自动把内容包装成TreeViewItem。比如把你的FolderTemplate改成这样:

<DataTemplate x:Key="FolderTemplate" x:DataType="localdata:FolderInfo">
    <StackPanel Orientation="Horizontal">
        <TextBlock Text="#Folder#" />
        <Image Width="20" Source="Assets/img2.png"/>
        <TextBlock Text="{x:Bind FolderName }" />
    </StackPanel>
</DataTemplate>

如果需要控制TreeViewItem的样式(比如展开/折叠行为、选中状态),可以用TreeView.ItemContainerStyle来设置,这样代码结构会更清晰。

按这个修改后,你的模板选择器应该就能正常根据IsFolder字段选择对应的模板了!

内容的提问来源于stack exchange,提问作者VladacusB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:51:01