MaterialDesignInXAML/MaterialDesignInXamlToolkit · error · InvalidOperationException
Cannot get theme outside of a WPF application. Use {nameof(R
Error message
Cannot get theme outside of a WPF application. Use {nameof(ResourceDictionaryExtensions)}.{nameof(ResourceDictionaryExtensions.GetTheme)} on the appropriate resource dictionary instead. What it means
PaletteHelper.GetTheme() reads the theme from Application.Current.Resources, so it only works inside a running WPF Application. When Application.Current is null it throws InvalidOperationException and directs you to ResourceDictionaryExtensions.GetTheme, which operates on an explicit ResourceDictionary instead.
Source
Thrown at src/MaterialDesignThemes.Wpf/PaletteHelper.cs:8
namespace MaterialDesignThemes.Wpf;
public class PaletteHelper
{
public virtual Theme GetTheme()
{
if (Application.Current is null)
throw new InvalidOperationException($"Cannot get theme outside of a WPF application. Use {nameof(ResourceDictionaryExtensions)}.{nameof(ResourceDictionaryExtensions.GetTheme)} on the appropriate resource dictionary instead.");
return GetResourceDictionary().GetTheme();
}
public virtual void SetTheme(Theme theme)
{
if (theme is null) throw new ArgumentNullException(nameof(theme));
if (Application.Current is null)
throw new InvalidOperationException($"Cannot set theme outside of a WPF application. Use {nameof(ResourceDictionaryExtensions)}.{nameof(ResourceDictionaryExtensions.SetTheme)} on the appropriate resource dictionary instead.");
GetResourceDictionary().SetTheme(theme);
RecreateThemeDictionaries();
}
public virtual IThemeManager? GetThemeManager()
{
if (Application.Current is null)
throw new InvalidOperationException($"Cannot get ThemeManager outside of a WPF application. Use {nameof(ResourceDictionaryExtensions)}.{nameof(ResourceDictionaryExtensions.GetThemeManager)} on the appropriate resource dictionary instead.");
return GetResourceDictionary().GetThemeManager();View on GitHub (pinned to 98edec3a0b)
Solutions
- Call ResourceDictionaryExtensions.GetTheme on your ResourceDictionary directly, e.g. myResourceDictionary.GetTheme().
- Guard the call: `if (Application.Current is not null) helper.GetTheme();`.
- In tests/design-time, construct a ResourceDictionary, merge the MaterialDesign theme, and read from it instead of PaletteHelper.
Example fix
// before var theme = new PaletteHelper().GetTheme(); // after (works in tests/designer) var theme = myResourceDictionary.GetTheme();
Defensive patterns
Strategy: type-guard
Validate before calling
if (Application.Current is null)
return myResourceDictionary.GetTheme();
return new PaletteHelper().GetTheme(); Type guard
Application.Current is not null
Prevention
- In tests/designer, call ResourceDictionaryExtensions.GetTheme on an explicit dictionary.
- Avoid PaletteHelper in shared/non-UI code paths.
- Gate theme reads behind an abstraction that works without Application.Current.
When it happens
Trigger: Calling new PaletteHelper().GetTheme() (directly or transitively) when Application.Current is null: design-time data contexts, unit tests, console hosts, or code that runs before the WPF Application object is constructed.
Common situations: Reading the theme in a designer or xUnit/nunit test; a shared service calling PaletteHelper from a non-WPF process; calling GetTheme during static initialization or before app startup completes.
Related errors
- Cannot set theme outside of a WPF application. Use {nameof(R
- Cannot get ThemeManager outside of a WPF application. Use {n
- theme
- Could not locate required resource with key(s) '{string.Join
- Non primary hues provided.
AI-assisted analysis of MaterialDesignInXAML/MaterialDesignInXamlToolkit@98edec3a0b (2026-08-13).
Data as JSON: /api/errors/d74f7c97e7f85d7d.
Report an issue: GitHub.