0

所以我FileSystemWatcher用来填充和更新播放列表。我想复制Windows资源管理器的许多功能,最重要的是:
*内联重命名
*慢速双击重命名

我这样做很麻烦,所以我想,也许有比重新实现轮子更简单的方法?也许我可以以某种方式在我的应用程序中托管一个 Windows 资源管理器窗口作为控件?

4

1 回答 1

2

在您的应用程序中托管一个真正的 Windows 资源管理器窗口是可能的,但充满危险:XP、Vista 和 Win7 中的技术不同,您将处理各种低级的东西。我强烈建议不要尝试它。

我认为你最好的选择是:

  1. 如果可以轻松适应您的需要,请使用 Microsoft.Win32.OpenFileDialog,或者
  2. 编写您自己的功能,或者如果您非常勇敢:
  3. 启动一个单独的资源管理器窗口,可选择使用试图强制其位置和大小超出您的应用程序的代码(这也很难......)

内联重命名功能注意事项

内联重命名和慢速双击重命名功能实现起来非常简单。

在您的视图模型中添加:

  • “NewName”字符串 DependencyProperty
  • 带有 PropertyChangedCallback 的“重命名”布尔 DependencyProperty。当“重命名”为真时,将 Name 复制到 NewName。当它变为假时,如果 NewName!=Name 将文件重命名为更新名称。

在您的 DataTemplate 中添加一个“重命名”触发器,将绑定到“名称”的 TextBlock 替换为绑定到“NewName”的 TextBox。

添加这些事件处理程序: * KeyDown 事件:如果按下 F2 切换重命名。如果按下 Enter 并重命名,则设置 Renaming=false。如果按下 Esc 并将重命名复制 Name 到 NewName 并设置 Renaming=false。* LostFocus 事件:设置重命名=false * 容器上的 SelectionChanged 事件:记录上次选择更改的时间戳。* MouseDown 事件:如果左键单击和选择更改 > 0.5 秒前,设置重命名 = true

Explorer 视图的许多其他功能同样易于实现,例如分组和多列。

希望这可以帮助。

于 2010-02-12T23:55:04.960 回答