diff --git a/src/Perspex.Controls/SystemDialog.cs b/src/Perspex.Controls/SystemDialog.cs index b61833390b..2c4ec92147 100644 --- a/src/Perspex.Controls/SystemDialog.cs +++ b/src/Perspex.Controls/SystemDialog.cs @@ -5,10 +5,14 @@ using Perspex.Controls.Platform; namespace Perspex.Controls { - public abstract class FileDialog : SystemDialog + public abstract class FileDialog : FileSystemDialog { public List Filters { get; set; } = new List(); - public string InitialFileName { get; set; } + public string InitialFileName { get; set; } + } + + public abstract class FileSystemDialog : SystemDialog + { public string InitialDirectory { get; set; } } @@ -30,7 +34,7 @@ namespace Perspex.Controls => PerspexLocator.Current.GetService().ShowFileDialogAsync(this, window?.PlatformImpl); } - public class OpenFolderDialog : SystemDialog + public class OpenFolderDialog : FileSystemDialog { public Task ShowAsync(Window window = null) => PerspexLocator.Current.GetService().ShowFolderDialogAsync(this, window?.PlatformImpl); diff --git a/src/Windows/Perspex.Win32/Perspex.Win32.csproj b/src/Windows/Perspex.Win32/Perspex.Win32.csproj index d62e03783c..36b5cf098b 100644 --- a/src/Windows/Perspex.Win32/Perspex.Win32.csproj +++ b/src/Windows/Perspex.Win32/Perspex.Win32.csproj @@ -38,8 +38,16 @@ CS1591 - - ..\..\..\packages\Ookii.Dialogs.1.0\lib\net35\Ookii.Dialogs.Wpf.dll + + ..\..\..\packages\Microsoft.WindowsAPICodePack-Core.1.1.0.2\lib\Microsoft.WindowsAPICodePack.dll + True + + + ..\..\..\packages\Microsoft.WindowsAPICodePack-Shell.1.1.0.0\lib\Microsoft.WindowsAPICodePack.Shell.dll + True + + + ..\..\..\packages\Microsoft.WindowsAPICodePack-Shell.1.1.0.0\lib\Microsoft.WindowsAPICodePack.ShellExtensions.dll True diff --git a/src/Windows/Perspex.Win32/SystemDialogImpl.cs b/src/Windows/Perspex.Win32/SystemDialogImpl.cs index 7ed1c83d34..d870515de8 100644 --- a/src/Windows/Perspex.Win32/SystemDialogImpl.cs +++ b/src/Windows/Perspex.Win32/SystemDialogImpl.cs @@ -10,7 +10,7 @@ using Perspex.Controls; using Perspex.Controls.Platform; using Perspex.Platform; using Perspex.Win32.Interop; -using Ookii.Dialogs.Wpf; +using Microsoft.WindowsAPICodePack.Dialogs; namespace Perspex.Win32 { @@ -131,14 +131,33 @@ namespace Perspex.Win32 } public Task ShowFolderDialogAsync(OpenFolderDialog dialog, IWindowImpl parent) - { - VistaFolderBrowserDialog fbd = new VistaFolderBrowserDialog(); - + { return Task.Factory.StartNew(() => { - fbd.ShowDialog(); + var dlg = new CommonOpenFileDialog(); + dlg.Title = dialog.Title; + dlg.IsFolderPicker = true; + dlg.InitialDirectory = dialog.InitialDirectory; + + dlg.AddToMostRecentlyUsedList = false; + dlg.AllowNonFileSystemItems = false; + + dlg.EnsureFileExists = true; + dlg.EnsurePathExists = true; + dlg.EnsureReadOnly = false; + dlg.EnsureValidNames = true; + dlg.Multiselect = false; + dlg.ShowPlacesList = true; + dlg.DefaultFileName = ""; + + string result = string.Empty; + + if (dlg.ShowDialog() == CommonFileDialogResult.Ok) + { + result = dlg.FileName; + } - return fbd.SelectedPath; + return result; }); } } diff --git a/src/Windows/Perspex.Win32/packages.config b/src/Windows/Perspex.Win32/packages.config index 7ea589649f..4f6923eb53 100644 --- a/src/Windows/Perspex.Win32/packages.config +++ b/src/Windows/Perspex.Win32/packages.config @@ -1,6 +1,7 @@  - + +