private UIElement CreateControls()
        {
            m_menu_main = new Menu();

            ////////
            // File
            m_menuItem_loadFromDatabase = new MenuItem() { Header = "Load DB" };
            m_menuItem_loadFromDatabase.Click += MenuItem_LoadFromDatabase_Click;

            m_menuItem_exportToXml = new MenuItem() { Header = "Export to Xml" };
            m_menuItem_exportToXml.Click += MenuItem_ExportToXml_Click;

            m_menuItem_importFromXml = new MenuItem() { Header = "Import From Xml" };
            m_menuItem_importFromXml.Click += MenuItem_ImportFromXml_Click;

            m_menuItem_file = new MenuItem() { Header = "File" };
            m_menuItem_file.Items.Add(m_menuItem_loadFromDatabase);

            m_menu_main.Items.Add(m_menuItem_file);

            ////////
            // Setup
            m_menuItem_GameStateOnInitialLoad = new MenuItem() { Header = "Area/Room On Initial Load" };
            RoutedEventHandler menuItem_GameStateOnInitialLoad_clickHandler =
                new RoutedEventHandler((x, y) =>
                {
                    if (m_menuItem_GameStateOnInitialLoad.IsSubmenuOpen)
                        m_menuItem_setup.IsSubmenuOpen = false;
                });
            m_menuItem_GameStateOnInitialLoad.AddHandler(Button.ClickEvent, menuItem_GameStateOnInitialLoad_clickHandler);
            m_menuItem_GameStateOnInitialLoad.AddHandler(MenuItem.ClickEvent, menuItem_GameStateOnInitialLoad_clickHandler);

            m_menuItem_setup = new MenuItem() { Header = "Setup" };
            m_menuItem_setup.Items.Add(m_menuItem_GameStateOnInitialLoad);

            ////////
            // Toolbar
            DockPanel dockPanel_main = new DockPanel();
            dockPanel_main.Children.Add(m_menu_main);
            DockPanel.SetDock(m_menu_main, Dock.Top);

            ////////
            // grid
            m_grid_main = new Grid();
            m_grid_main.RowDefinitions.Add(new RowDefinition() { Height = GridLength.Auto });
            m_grid_main.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(100.0, GridUnitType.Star) });
            m_grid_main.SetGridRowColumn(dockPanel_main, 0, 0);

            return m_grid_main;
        }
        public static MenuItem Construct(SearchControl sc, MenuItem plainExcelMenuItem)
        {
            MenuItem miResult = new MenuItem
            {
                Header = ExcelMessage.Reports.NiceToString(),
                Icon = ExtensionsImageLoader.GetImageSortName("excel.png").ToSmallImage()

            };

            miResult.AddHandler(MenuItem.ClickEvent, new RoutedEventHandler((object sender, RoutedEventArgs e) =>
            {
                e.Handled = true;

                if (e.OriginalSource is MenuItem) //Not to capture the mouseDown of the scrollbar buttons
                {
                    MenuItem b = (MenuItem)e.OriginalSource;
                    Lite<ExcelReportEntity> reportLite = (Lite<ExcelReportEntity>)b.Tag;
                    
                    SaveFileDialog sfd = new SaveFileDialog()
                    {
                        AddExtension = true,
                        DefaultExt = ".xlsx",
                        Filter = ExcelMessage.Excel2007Spreadsheet.NiceToString(),
                        FileName = reportLite.ToString() + " - " + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx",
                        OverwritePrompt = true,
                        Title = ExcelMessage.FindLocationFoExcelReport.NiceToString()
                    };

                    if (sfd.ShowDialog(Window.GetWindow(sc)) == true)
                    {
                        byte[] result = Server.Return((IExcelReportServer r) => r.ExecuteExcelReport(reportLite, sc.GetQueryRequest(true)));

                        File.WriteAllBytes(sfd.FileName, result);

                        System.Diagnostics.Process.Start(sfd.FileName);
                    }
                }
            }));

            Action initialize = null;

            MenuItem miAdmin = new MenuItem()
            {
                Header = "Administrar",
                Icon = ExtensionsImageLoader.GetImageSortName("folderedit.png").ToSmallImage()
            };

            miAdmin.Click += (object sender, RoutedEventArgs e)=>
            {
                var query = QueryClient.GetQuery(sc.QueryName);

                Finder.Explore(new ExploreOptions(typeof(ExcelReportEntity))
                {
                    ShowFilters = false,
                    ShowFilterButton = false,
                    FilterOptions = new List<FilterOption>
                    {
                        new FilterOption 
                        { 
                            ColumnName = "Query", 
                            Operation = FilterOperation.EqualTo, 
                            Value = query.ToLite(query.IsNew),
                            Frozen = true
                        }
                    },
                    Closed = (_, __) => miAdmin.Dispatcher.Invoke(() => initialize()) //Refrescar lista de informes tras salir del administrador
                });

                e.Handled = true;
            };

            initialize = ()=>
            {
                miResult.Items.Clear();

                List<Lite<ExcelReportEntity>> reports = Server.Return((IExcelReportServer s)=>s.GetExcelReports(sc.QueryName));

                if (plainExcelMenuItem != null)
                {
                    miResult.Items.Add(plainExcelMenuItem);
                    miResult.Items.Add(new Separator());
                }

                miResult.Header = new TextBlock { Inlines = { new Run(ExcelMessage.Reports.NiceToString()), reports.Count == 0? (Inline)new Run(): new Bold(new Run(" (" + reports.Count + ")")) } };

                if (reports.Count > 0)
                {
                    foreach (Lite<ExcelReportEntity> report in reports)
                    {
                        MenuItem mi = new MenuItem()
                        {
                            Header = report.ToString(),
                            Icon = ExtensionsImageLoader.GetImageSortName("excelDoc.png").ToSmallImage(),
                            Tag = report,
                        };
                        miResult.Items.Add(mi);
                    }
                }          

          
                miResult.Items.Add(miAdmin);
            };

            initialize();

            return miResult;
        }