禁用右键单击FolderBrowserDialog对话框 - wpf?

时间:2015-07-29 02:26:00

标签: c# wpf wpf-controls folderbrowserdialog

 System.Windows.Forms.FolderBrowserDialog dlg = new FolderBrowserDialog();
 HwndSource source = PresentationSource.FromVisual(this) as HwndSource;
 System.Windows.Forms.IWin32Window win = new OldWindow(source.Handle);
 System.Windows.Forms.DialogResult result = dlg.ShowDialog(win);

我用它来获取文件夹对话框,但现在我需要在该文件夹对话框中禁用右键单击,以便我可以阻止从那里删除文件夹.. enter code here

创建自定义folderDialog框是我想要的最后一个选项..

那么,如果没有自定义的folderDialog,有人可能会建议任何可能的解决方案。

2 个答案:

答案 0 :(得分:2)

你做不到。该类无法继承,因此您无法覆盖任何设置。没有事件可以挂钩。

所以你有几个选择:

  1. 自己动手
  2. 使用文件系统锁定用户环境。
  3. 购买具有此功能的第三方控件。
  4. 我们选择了选项2,因为最终用户不需要在我们的RDP服务器上使用“普通”Windows应用程序/文件位置,他们只需要运行我们的应用程序。添加它们的组织单位(OU)应用权限,他们只能访问我们希望他们有权访问的文件夹。他们看不到显示对话框时会看到的任何正常项目,但可以创建文件夹,保存项目,从我们允许其使用的文件夹中加载项目。

答案 1 :(得分:0)

拉​​温德拉,

由于ContextMenu中的“删除”是一项Windows功能,因此您必须修改注册表设置。

实质上,你必须修改/删除删除注册表项&代码执行后,您必须恢复它。

您可以在以下位置找到注册表项:HKEY_CLASSES_ROOT。 (你确实需要一些时间来弄清楚这个条目。)

例如:

  System.Windows.Forms.FolderBrowserDialog fd = new System.Windows.Forms.FolderBrowserDialog();

  //Get key for New menu option in Context menu.
  RegistryKey key = Registry.ClassesRoot.OpenSubKey(@"Directory\Background\shellex\ContextMenuHandlers\New",true);

  //Set it to blank.
  key.SetValue("", "");
  fd.ShowDialog();

  //Restore the value.
  key.SetValue("", "{D969A300-E7FF-11d0-A93B-00A0C90F2719}");`