如何让Windows文件资源管理器默认显示自定义文件属性列
让Windows文件资源管理器默认显示同步根目录的自定义属性列
问题背景
在Windows 10系统中,已通过StorageProviderSyncRootInfo创建同步目录,并完成自定义属性的注册,但这些自定义属性列仅能通过用户手动在文件资源管理器的「更多」选项中选择才会显示,需要设置为默认自动显示。
当前注册自定义属性的代码如下:
public static void RegisterCustomStates(StorageProviderSyncRootInfo syncRootInfo) { var definitions = syncRootInfo.StorageProviderItemPropertyDefinitions; foreach (var state in CustomState.Values) { var def = new StorageProviderItemPropertyDefinition { DisplayNameResource = state.Name, Id = state.Id }; if (!definitions.Contains(def)) definitions.Add(def); } } public class CustomState { public static readonly CustomState SyncStatus = new(1, "Status", "shell32.dll,-259"); public static readonly CustomState CheckOutFlag = new(2, "CheckOut", "shell32.dll,-259"); public static IEnumerable<CustomState> Values { get { yield return SyncStatus; yield return CheckOutFlag; } } #region definitions public int Id { get; } public string Name { get; } public string IconResource { get; } private CustomState(int id, string name, string iconResource) { Id = id; Name = name; IconResource = iconResource; } #endregion }
解决方案
针对Windows 10 1809及以上版本(推荐)
从Windows 10 1809开始,StorageProviderItemPropertyDefinition类新增了IsShownByDefault属性,只需将该属性设置为true,即可让自定义属性列默认显示在文件资源管理器中。
修改后的注册代码如下:
public static void RegisterCustomStates(StorageProviderSyncRootInfo syncRootInfo) { var definitions = syncRootInfo.StorageProviderItemPropertyDefinitions; foreach (var state in CustomState.Values) { var def = new StorageProviderItemPropertyDefinition { DisplayNameResource = state.Name, Id = state.Id, IsShownByDefault = true // 新增:设置列默认显示 }; if (!definitions.Contains(def)) definitions.Add(def); } }
修改完成后,重新注册同步根目录,设置即可生效。
针对Windows 10 1809以下版本
如果需兼容更早的Windows 10版本,可通过以下步骤手动配置默认视图:
- 打开目标同步目录,在文件资源管理器中添加需要默认显示的自定义属性列;
- 右键空白区域 → 「查看」→ 「选项」→ 「更改文件夹和搜索选项」;
- 切换到「查看」标签页,点击「应用到文件夹」,确认后即可让所有同类型的文件夹默认显示这些列。
也可以通过导出注册表配置的方式批量部署:
- 配置好视图后,导出
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Streams\Defaults下对应文件夹模板的注册表项; - 将导出的注册表文件部署到目标用户机器上执行导入。
内容的提问来源于stack exchange,提问作者Keven Albert
相关产品推荐
相关产品推荐

