code_junkie

How to use a FolderBrowserDialog from a WPF application

Nov 12th, 2011
294
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.57 KB | None | 0 0
  1. public static class MyWpfExtensions
  2. {
  3. public static System.Windows.Forms.IWin32Window GetIWin32Window(this System.Windows.Media.Visual visual)
  4. {
  5. var source = System.Windows.PresentationSource.FromVisual(visual) as System.Windows.Interop.HwndSource;
  6. System.Windows.Forms.IWin32Window win = new OldWindow(source.Handle);
  7. return win;
  8. }
  9.  
  10. private class OldWindow : System.Windows.Forms.IWin32Window
  11. {
  12. private readonly System.IntPtr _handle;
  13. public OldWindow(System.IntPtr handle)
  14. {
  15. _handle = handle;
  16. }
  17.  
  18. #region IWin32Window Members
  19. System.IntPtr System.Windows.Forms.IWin32Window.Handle
  20. {
  21. get { return _handle; }
  22. }
  23. #endregion
  24. }
  25. }
  26.  
  27. var dlg = new FolderBrowserDialog();
  28. System.Windows.Forms.DialogResult result = dlg.ShowDialog(this.GetIWin32Window());
  29.  
  30. public class OldWindow : System.Windows.Forms.IWin32Window
  31. {
  32. IntPtr _handle;
  33.  
  34. public OldWindow(IntPtr handle)
  35. {
  36. _handle = handle;
  37. }
  38.  
  39. #region IWin32Window Members
  40.  
  41. IntPtr System.Windows.Forms.IWin32Window.Handle
  42. {
  43. get { return _handle; }
  44. }
  45.  
  46. #endregion
  47. }
  48.  
  49. IntPtr mainWindowPtr = new WindowInteropHelper(this).Handle; // 'this' means WPF Window
  50. folderBrowserDialog.ShowDialog(new OldWindow(mainWindowPtr));
  51.  
  52. private class OldWindow : System.Windows.Forms.IWin32Window
  53. {
  54. IntPtr _handle;
  55. public OldWindow(IntPtr handle)
  56. {
  57. _handle = handle;
  58. }
  59.  
  60. #region IWin32Window Members
  61. IntPtr System.Windows.Forms.IWin32Window.Handle
  62. {
  63. get { return _handle; }
  64. }
  65. #endregion
  66. }
  67.  
  68. System.Windows.Forms.FolderBrowserDialog dlg = new FolderBrowserDialog();
  69. HwndSource source = PresentationSource.FromVisual(this) as HwndSource;
  70. System.Windows.Forms.IWin32Window win = new OldWindow(source.Handle);
  71. System.Windows.Forms.DialogResult result = dlg.ShowDialog(win);
  72.  
  73. HwndSource source = PresentationSource.FromVisual(this) as HwndSource;
  74. IWin32Window win = source as IWin32Window;
  75.  
  76. //add a reference to System.Windows.Forms.dll
  77.  
  78. public partial class MainWindow : Window, System.Windows.Forms.IWin32Window
  79. {
  80. public MainWindow()
  81. {
  82. InitializeComponent();
  83. }
  84.  
  85. private void button_Click(object sender, RoutedEventArgs e)
  86. {
  87. var fbd = new FolderBrowserDialog();
  88. fbd.ShowDialog(this);
  89. }
  90.  
  91. IntPtr System.Windows.Forms.IWin32Window.Handle
  92. {
  93. get
  94. {
  95. return ((HwndSource)PresentationSource.FromVisual(this)).Handle;
  96. }
  97. }
  98. }
Add Comment
Please, Sign In to add comment