Upgrade UI to MahApps.Metro with runtime theming
Modernize WPF UI using MahApps.Metro: switch MainWindow to MetroWindow, add MetroTabControl/MetroTabItem, custom tab styles, and icon-based theme toggle. Move version display to window commands. Integrate MahApps resource dictionaries and ThemeManager for runtime theme switching. Update startup logic for proper theming. WinForms fallback retained.
This commit is contained in:
parent
ec4635a37f
commit
9007a27fb2
4 changed files with 207 additions and 54 deletions
|
|
@ -86,17 +86,42 @@ static class Program
|
|||
//Application.Run(mainForm);
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
if (serviceProvider.GetService(typeof(ImageCatalog_2.MainWindow)) is ImageCatalog_2.MainWindow wpfMain)
|
||||
// Create the WPF Application and merge MahApps resources BEFORE constructing the MainWindow
|
||||
// so InitializeComponent sees the theme resources on first render.
|
||||
var wpfApp = new System.Windows.Application();
|
||||
try
|
||||
{
|
||||
wpfApp.Resources.MergedDictionaries.Add(new System.Windows.ResourceDictionary { Source = new Uri("pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml") });
|
||||
wpfApp.Resources.MergedDictionaries.Add(new System.Windows.ResourceDictionary { Source = new Uri("pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml") });
|
||||
// Default Light theme (can be replaced at runtime)
|
||||
wpfApp.Resources.MergedDictionaries.Add(new System.Windows.ResourceDictionary { Source = new Uri("pack://application:,,,/MahApps.Metro;component/Styles/Themes/Light.Blue.xaml") });
|
||||
|
||||
// Also notify ThemeManager about initial theme so chrome and MahApps brushes are applied
|
||||
try
|
||||
{
|
||||
ControlzEx.Theming.ThemeManager.Current.ChangeTheme(wpfApp, "Light.Blue");
|
||||
}
|
||||
catch
|
||||
{
|
||||
// ignore if ThemeManager API isn't present
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
// If resources fail to load (package not present at runtime), continue silently
|
||||
}
|
||||
|
||||
// Now resolve the WPF MainWindow so its constructor runs with the application resources available
|
||||
var wpfMain = serviceProvider.GetService(typeof(ImageCatalog_2.MainWindow)) as ImageCatalog_2.MainWindow;
|
||||
if (wpfMain is not null)
|
||||
{
|
||||
// Start WPF app
|
||||
var app = new System.Windows.Application();
|
||||
app.Run(wpfMain);
|
||||
}
|
||||
else
|
||||
{
|
||||
var mainForm = serviceProvider.GetRequiredService<MainForm>();
|
||||
Application.Run(mainForm);
|
||||
wpfApp.Run(wpfMain);
|
||||
return;
|
||||
}
|
||||
|
||||
// Fallback to WinForms UI
|
||||
var mainForm = serviceProvider.GetRequiredService<MainForm>();
|
||||
System.Windows.Forms.Application.Run(mainForm);
|
||||
}
|
||||
|
||||
private static void ConfigureServices(ServiceCollection services)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue