示例#1
0
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            System.Windows.Forms.Application.EnableVisualStyles();
            System.Windows.Forms.Application.SetCompatibleTextRenderingDefault(false);

            var opts = ParseArgs(e.Args);
            var themeInfoProvider = new ThemeInfoProvider();

            SelectThemes(opts, themeInfoProvider, out var wpfTheme, out var nativeTheme);

            ThemeManager.Install();
            if (wpfTheme != null)
            {
                var uri = wpfTheme.ResourceUri;
                if (!ThemeManager.SetPresentationFrameworkTheme(uri))
                {
                    MessageBox.Show($"Failed to load {uri}.");
                }
            }

            window     = new MainWindow();
            MainWindow = window;

            viewModel = new MainWindowViewModel(themeInfoProvider);
            viewModel.CurrentWpfTheme = wpfTheme;
            window.DataContext        = viewModel;

            if (opts.WindowBounds != null)
            {
                var bounds = opts.WindowBounds.Value;
                window.Left   = bounds.Left;
                window.Top    = bounds.Top;
                window.Width  = bounds.Width;
                window.Height = bounds.Height;
                window.WindowStartupLocation = WindowStartupLocation.Manual;
            }
            else
            {
                window.WindowStartupLocation = WindowStartupLocation.CenterScreen;
            }

            if (opts.TabIndex != null && opts.TabIndex >= 0 && opts.TabIndex < viewModel.Pages.Count)
            {
                viewModel.CurrentPage = viewModel.Pages[opts.TabIndex.Value];
            }

            window.Show();

            if (nativeTheme != null)
            {
                viewModel.OverrideNativeTheme(nativeTheme).Forget();
            }
        }
示例#2
0
        private void SelectThemes(
            Options opts, ThemeInfoProvider themeInfoProvider,
            out WpfThemeInfo wpfTheme, out NativeThemeInfo nativeTheme)
        {
            wpfTheme    = null;
            nativeTheme = null;

            if (opts.Theme != null)
            {
                string name  = ExpandShortThemeName(opts.Theme);
                var    theme = themeInfoProvider.Themes.FirstOrDefault(x => x.Name == name);
                if (theme != null)
                {
                    wpfTheme    = theme.WpfTheme;
                    nativeTheme = theme.NativeTheme;
                }
            }

            if (opts.WpfTheme != null)
            {
                string name = ExpandShortThemeName(opts.WpfTheme);
                wpfTheme = themeInfoProvider.WpfThemes.FirstOrDefault(x => x.Name == name);
            }
            if (wpfTheme == null && opts.WpfThemeResourceUri != null)
            {
                wpfTheme = themeInfoProvider.WpfThemes.FirstOrDefault(
                    x => x.ResourceUri == opts.WpfThemeResourceUri);

                if (wpfTheme == null)
                {
                    wpfTheme = new WpfThemeInfo(opts.WpfThemeResourceUri.ToString(), opts.WpfThemeResourceUri);
                }
            }

            if (opts.NativeTheme != null)
            {
                string name = ExpandShortThemeName(opts.NativeTheme);
                nativeTheme = themeInfoProvider.NativeThemes.FirstOrDefault(x => x.Name == name);
            }
            if (nativeTheme == null && opts.NativeThemeFile != null)
            {
                nativeTheme = themeInfoProvider.NativeThemes.FirstOrDefault(x => string.Equals(x.Path.FullName,
                                                                                               opts.NativeThemeFile.FullName, StringComparison.OrdinalIgnoreCase));

                if (nativeTheme == null)
                {
                    nativeTheme = NativeThemeInfo.FromPath(
                        opts.NativeThemeFile.FullName,
                        new UxThemeLoadParams {
                        IsHighContrast = opts.IsHighContrast
                    });
                }
            }
        }
        public MainWindowViewModel(ThemeInfoProvider themeInfoProvider)
        {
            this.themeInfoProvider = themeInfoProvider;

            changeThemeCommand    = new AsyncDelegateCommand <ThemeInfoPair>(ChangeTheme);
            changeWpfThemeCommand = new AsyncDelegateCommand <WpfThemeInfo>(ChangeWpfTheme);

            foreach (var theme in themeInfoProvider.Themes)
            {
                Themes.Add(theme);
            }
            foreach (var theme in themeInfoProvider.WpfThemes)
            {
                WpfThemes.Add(theme);
            }
            foreach (var theme in themeInfoProvider.NativeThemes)
            {
                NativeThemes.Add(theme);
            }

            Themes.CollectionChanged       += (s, e) => UpdateMenu();
            WpfThemes.CollectionChanged    += (s, e) => UpdateMenu();
            NativeThemes.CollectionChanged += (s, e) => UpdateMenu();
            UpdateMenu();

            Pages.Add(ControlComparisonViewModel.Create <TextBoxSampleNative, TextBoxSampleWpf>("TextBox"));
            Pages.Add(ControlComparisonViewModel.Create <ButtonSampleNative, ButtonSampleWpf>("Button"));
            Pages.Add(ControlComparisonViewModel.Create <RadioCheckSampleNative, RadioCheckSampleWpf>("Radio/Check"));
            Pages.Add(ControlComparisonViewModel.Create <MenuSampleNative, MenuSampleWpf>("Menu"));
            Pages.Add(ControlComparisonViewModel.Create <ScrollBarSampleNative, ScrollBarSampleWpf>("ScrollBar"));
            Pages.Add(ControlComparisonViewModel.Create <ComboBoxSampleNative, ComboBoxSampleWpf>("ComboBox"));
            Pages.Add(ControlComparisonViewModel.Create <ListBoxSampleNative, ListBoxSampleWpf>("ListBox"));
            Pages.Add(ControlComparisonViewModel.Create <ListViewSampleNative, ListViewSampleWpf>("ListView"));
            Pages.Add(ControlComparisonViewModel.Create <TreeViewSampleNative, TreeViewSampleWpf>("TreeView"));
            Pages.Add(ControlComparisonViewModel.Create <DataGridSampleNative, DataGridSampleWpf>("DataGrid"));
            Pages.Add(ControlComparisonViewModel.Create <TabControlSampleNative, TabControlSampleWpf>("TabControl"));
            Pages.Add(ControlComparisonViewModel.Create <ProgressBarSampleNative, ProgressBarSampleWpf>("ProgressBar"));
            Pages.Add(ControlComparisonViewModel.Create <TrackbarSampleNative, TrackbarSampleWpf>("Trackbar"));
            Pages.Add(ControlComparisonViewModel.Create <GroupBoxSampleNative, GroupBoxSampleWpf>("GroupBox"));
            Pages.Add(ControlComparisonViewModel.Create <StatusBarSampleNative, StatusBarSampleWpf>("StatusBar"));
            Pages.Add(ControlComparisonViewModel.Create <ToolBarSampleNative, ToolBarSampleWpf>("ToolBar"));
            Pages.Add(ControlComparisonViewModel.Create <CalendarSampleNative, CalendarSampleWpf>("Calendar"));
            Pages.Add(ControlComparisonViewModel.Create <MiscSampleNative, MiscSampleWpf>("Misc"));
            Pages.Add(ControlComparisonViewModel.Create <System.Windows.Forms.UserControl, ExpanderSampleWpf>("Expander"));
            Pages.Add(ControlComparisonViewModel.Create <CombinedSampleNative, CombinedSampleWpf>("All"));
            Pages.Add(ControlComparisonViewModel.Create <System.Windows.Forms.UserControl, DocumentSample>("Doc"));
            Pages.Add(new ColorList());
            CurrentPage = Pages[0];

            NativeThemeName = "Native: Default";
            WpfThemeName    = "WPF: Default";
        }