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(); } }
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"; }