在WPF中复制Windows资源管理器文件夹UI功能的最佳方法是什么?

时间:2010-02-11 18:46:16

标签: wpf windows user-interface windows-explorer

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

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

1 个答案:

答案 0 :(得分:2)

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

我认为你最好的选择是:

  1. 使用Microsoft.Win32.OpenFileDialog,如果它可以很容易地适应您的需要,或
  2. 编写您自己的功能,或者如果您非常勇敢:
  3. 启动一个单独的资源管理器窗口,可选择使用代码试图强制其位置和大小超过您的应用程序(这也很难......)
  4. 关于内联重命名功能的说明

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

    在您的视图模型中添加:

    • “NewName”字符串DependencyProperty
    • 使用PropertyChangedCallback“重命名”bool DependencyProperty。当“重命名”成立时,将名称复制到NewName。当它变为false时,如果NewName!= Name将文件重命名为Name。

    在你的DataTemplate中添加一个“重命名”触发器,用一个绑定到“NewName”的TextBox替换绑定到“Name”的TextBlock。

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

    资源管理器视图的许多其他功能同样易于实现,例如分组和多列。

    希望这有帮助。