Using DotNetBrowser DialogHandler API you can handle the situation when web page needs to display File Open dialog (e.g. when the user clicks File Input element on a web form). Using this API you can display your own File Open dialog or suppress the dialog at all and provide the path to a file program.


Note: By default DotNetBrowser displays standard OpenFileChooser dialog.


The following sample demonstrates how to modify this logic:


using DotNetBrowser;
using DotNetBrowser.Events;
using DotNetBrowser.WPF;
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;

namespace FileUploadSample
{
    class Program
    {
        public class WindowMain : Window
        {
            private WPFBrowserView browserView;

            public WindowMain()
            {
                Browser browser = BrowserFactory.Create();
                browserView = new WPFBrowserView(browser);

                browser.DialogHandler = new SampleDialogHandler(this);

                Content = browserView;

                Width = 1024;
                Height = 768;
                this.Loaded += WindowMain_Loaded;
            }

            void WindowMain_Loaded(object sender, RoutedEventArgs e)
            {
                browserView.Browser.LoadHTML("http://www.cs.tut.fi/~jkorpela/forms/file.html");
            }

            private class SampleDialogHandler : DialogHandler
            {
                private WindowMain windowMain;

                public SampleDialogHandler(WindowMain windowMain)
                {
                    // TODO: Complete member initialization
                    this.windowMain = windowMain;
                }
                public override CloseStatus OnFileChooser(FileChooserParams parameters)
                {
                    CloseStatus returnValue = CloseStatus.CANCEL;

                    bool isOpenMode = parameters.Mode == FileChooserMode.Open;
                    bool isOpenMultipleMode = parameters.Mode == FileChooserMode.OpenMultiple;
                    if (isOpenMode || isOpenMultipleMode)
                    {
                        Application.Current.Dispatcher.Invoke((Action)(() =>
                        {
                            OpenFileDialog fileChooser = new OpenFileDialog();
                            fileChooser.Multiselect = isOpenMultipleMode;
                            fileChooser.Title = "Open";
                            fileChooser.Filter = parameters.Filter;

                            fileChooser.FileOk += delegate
                            {
                                if (isOpenMultipleMode)
                                {
                                    string[] selectedFiles = fileChooser.FileNames;
                                    parameters.SelectedFiles = String.Join("|", selectedFiles);
                                }
                                else
                                {
                                    parameters.SelectedFiles = fileChooser.FileName;
                                }
                                returnValue = CloseStatus.OK;
                            };

                            fileChooser.ShowDialog(windowMain);
                        }));
                    }

                    return returnValue;
                }
            }

            [STAThread]
            public static void Main()
            {
                Application app = new Application();

                WindowMain wnd = new WindowMain();
                app.Run(wnd);

                var browser = wnd.browserView.Browser;
                wnd.browserView.Dispose();
                browser.Dispose();
            }
        }
    }
}