diff --git a/src/Perspex.Controls/Platform/ISystemDialogImpl.cs b/src/Perspex.Controls/Platform/ISystemDialogImpl.cs
index d3af982f95..f45eec8f95 100644
--- a/src/Perspex.Controls/Platform/ISystemDialogImpl.cs
+++ b/src/Perspex.Controls/Platform/ISystemDialogImpl.cs
@@ -18,5 +18,7 @@ namespace Perspex.Controls.Platform
/// The parent window.
/// A task returning the selected filenames.
Task ShowFileDialogAsync(FileDialog dialog, IWindowImpl parent);
+
+ Task ShowFolderDialogAsync(OpenFolderDialog dialog, IWindowImpl parent);
}
}
diff --git a/src/Perspex.Controls/SystemDialog.cs b/src/Perspex.Controls/SystemDialog.cs
index 6eae1e9e9d..b61833390b 100644
--- a/src/Perspex.Controls/SystemDialog.cs
+++ b/src/Perspex.Controls/SystemDialog.cs
@@ -12,10 +12,9 @@ namespace Perspex.Controls
public string InitialDirectory { get; set; }
}
-
public class SaveFileDialog : FileDialog
{
- public string DefaultExtension { get; set; }
+ public string DefaultExtension { get; set; }
public async Task ShowAsync(Window window = null)
=>
@@ -31,6 +30,12 @@ namespace Perspex.Controls
=> PerspexLocator.Current.GetService().ShowFileDialogAsync(this, window?.PlatformImpl);
}
+ public class OpenFolderDialog : SystemDialog
+ {
+ public Task ShowAsync(Window window = null)
+ => PerspexLocator.Current.GetService().ShowFolderDialogAsync(this, window?.PlatformImpl);
+ }
+
public abstract class SystemDialog
{
public string Title { get; set; }
diff --git a/src/Windows/Perspex.Win32/Perspex.Win32.csproj b/src/Windows/Perspex.Win32/Perspex.Win32.csproj
index 0cd573d7b8..d62e03783c 100644
--- a/src/Windows/Perspex.Win32/Perspex.Win32.csproj
+++ b/src/Windows/Perspex.Win32/Perspex.Win32.csproj
@@ -38,6 +38,10 @@
CS1591
+
+ ..\..\..\packages\Ookii.Dialogs.1.0\lib\net35\Ookii.Dialogs.Wpf.dll
+ True
+
diff --git a/src/Windows/Perspex.Win32/SystemDialogImpl.cs b/src/Windows/Perspex.Win32/SystemDialogImpl.cs
index 69f394c75c..7ed1c83d34 100644
--- a/src/Windows/Perspex.Win32/SystemDialogImpl.cs
+++ b/src/Windows/Perspex.Win32/SystemDialogImpl.cs
@@ -10,6 +10,7 @@ using Perspex.Controls;
using Perspex.Controls.Platform;
using Perspex.Platform;
using Perspex.Win32.Interop;
+using Ookii.Dialogs.Wpf;
namespace Perspex.Win32
{
@@ -128,5 +129,17 @@ namespace Perspex.Win32
return files.Select(f => Path.Combine(dir, f)).ToArray();
});
}
+
+ public Task ShowFolderDialogAsync(OpenFolderDialog dialog, IWindowImpl parent)
+ {
+ VistaFolderBrowserDialog fbd = new VistaFolderBrowserDialog();
+
+ return Task.Factory.StartNew(() =>
+ {
+ fbd.ShowDialog();
+
+ return fbd.SelectedPath;
+ });
+ }
}
}
diff --git a/src/Windows/Perspex.Win32/packages.config b/src/Windows/Perspex.Win32/packages.config
index 571e4fe023..7ea589649f 100644
--- a/src/Windows/Perspex.Win32/packages.config
+++ b/src/Windows/Perspex.Win32/packages.config
@@ -1,5 +1,6 @@
+