Theme Assets, Fonts, and Resource Paths

Written By launchbox

Last updated About 1 month ago

LaunchBox Desktop themes can include their own images, fonts, plugins, and other supporting files. These assets live inside the active theme folder under LBThemes, and theme XAML can reference them with LaunchBox-specific path placeholders.

Using those placeholders is important because LaunchBox may be installed in different locations for different users. Hard-coded absolute paths will usually break when the theme is shared.


Theme Folder Location

LaunchBox Desktop themes live in the LBThemes folder inside the LaunchBox root folder.

LaunchBox\LBThemes\[Theme Name]\     Views\     Images\     Fonts\     Plugins\

The active theme is selected from Tools > Manage > LaunchBox Themes and Media. When LaunchBox needs a themed view, it looks in the active theme's Views folder.

LBThemes\[Theme Name]\Views\MainView.xaml    LBThemes\[Theme Name]\Views\SideBarView.xaml    LBThemes\[Theme Name]\Views\BoxesContentView.xaml

If the active theme folder cannot be found, LaunchBox falls back to the Default theme. If a specific view cannot be found, LaunchBox attempts to load the Default version of that view.


Standard Theme Folders

A LaunchBox theme usually uses these folders:

FolderPurpose

Views

XAML files that replace LaunchBox's themed views.

Images

Theme-specific image files used by the XAML.

Fonts

Theme-specific font files used by the XAML.

Plugins

Optional theme-specific plugins.

The Default theme ships with Views, Images, and Fonts. Custom themes can follow the same structure.


LAUNCHBOX_THEME_FOLDER

Use LAUNCHBOX_THEME_FOLDER when referencing files that are inside the current theme folder. Before LaunchBox loads the XAML, it replaces this placeholder with a file URI pointing to the active theme folder.

LAUNCHBOX_THEME_FOLDER/Images/Header.png    LAUNCHBOX_THEME_FOLDER/Fonts/Poppins-Regular.ttf#Poppins

This is the safest way to reference theme-specific assets because the path follows the active theme wherever the user's LaunchBox installation is located.

Image Example

<Image Source="LAUNCHBOX_THEME_FOLDER/Images/Logo.png"           Stretch="Uniform" />

Background Example

<Grid>  <Grid.Background>    <ImageBrush ImageSource="LAUNCHBOX_THEME_FOLDER/Images/Background.jpg"                    Stretch="UniformToFill" />  </Grid.Background></Grid>

Font Example

<TextBlock Text="{Binding Title}"               FontFamily="LAUNCHBOX_THEME_FOLDER/Fonts/Poppins-Bold.ttf#Poppins Bold" />

LAUNCHBOX_ROOT_FOLDER

Use LAUNCHBOX_ROOT_FOLDER when you need to reference files from the LaunchBox root folder rather than the current theme folder.

LAUNCHBOX_ROOT_FOLDER/Images/Platforms/Nintendo Entertainment System/Banner/example.png

Most theme-specific files should use LAUNCHBOX_THEME_FOLDER. Use LAUNCHBOX_ROOT_FOLDER only when the file is expected to come from the user's LaunchBox installation, media folders, or another shared LaunchBox folder.


Legacy Site-of-Origin Paths

LaunchBox also converts old pack://siteoforigin:,,, references to the LaunchBox root folder when loading theme XAML.

pack://siteoforigin:,,,/LBThemes/[Theme Name]/Images/File.png

This exists for compatibility with older themes. New themes should prefer LAUNCHBOX_THEME_FOLDER and LAUNCHBOX_ROOT_FOLDER because they are clearer and easier to move between installations.


Referencing Fonts

Theme fonts usually belong in the theme's Fonts folder. In XAML, reference the font file and then include the font family name after the # symbol.

FontFamily="LAUNCHBOX_THEME_FOLDER/Fonts/Poppins-Regular.ttf#Poppins"

The family name must match the actual font family name inside the font file. If the file name and family name are different, use the family name that Windows reports for the font.

When in doubt, test the font in LaunchBox after restarting the application. If the font does not apply, the file path or family name is usually the problem.


Referencing Images

Theme images can be referenced directly from XAML controls such as Image, ImageBrush, and custom LaunchBox controls that accept image paths.

<Image Source="LAUNCHBOX_THEME_FOLDER/Images/Controller.png" />

For theme artwork, keep files inside the theme's Images folder. This keeps the theme portable and avoids depending on files that may not exist in another user's LaunchBox installation.


Theme-Specific Plugins

LaunchBox checks for a Plugins folder inside the active LaunchBox theme folder.

LBThemes\[Theme Name]\Plugins

If that folder exists, LaunchBox loads plugins from it for that theme. This is useful when a theme needs custom controls or behavior that cannot be done with XAML alone.

Use theme-specific plugins only when necessary. For most visual changes, XAML, images, fonts, bindings, and existing LaunchBox controls are enough.


What Gets Loaded From Views

LaunchBox loads themed XAML from:

LBThemes\[Theme Name]\Views\[ViewName].xaml

For example:

LBThemes\[Theme Name]\Views\MainView.xaml    LBThemes\[Theme Name]\Views\GameDetailsView.xaml    LBThemes\[Theme Name]\Views\PlatformFiltersDetailsView.xaml

If PlatformFiltersDetailsView.xaml is missing, LaunchBox can fall back to GameDetailsView.xaml for that view. For other missing views, LaunchBox falls back to the Default theme when possible.


Best Practices

  • Keep custom images in LBThemes\[Theme Name]\Images.

  • Keep custom fonts in LBThemes\[Theme Name]\Fonts.

  • Keep view XAML files in LBThemes\[Theme Name]\Views.

  • Use LAUNCHBOX_THEME_FOLDER for theme-specific files.

  • Use LAUNCHBOX_ROOT_FOLDER only for files outside the theme folder.

  • Avoid absolute paths such as C:\LaunchBox\....

  • Avoid referencing assets from another theme folder.

  • Restart LaunchBox after changing fonts, plugins, or loaded view files.



In Short

Put theme assets inside the theme folder and reference them with LaunchBox's path placeholders. Use LAUNCHBOX_THEME_FOLDER for images, fonts, and files bundled with the theme. Use LAUNCHBOX_ROOT_FOLDER only when you intentionally need something from the wider LaunchBox installation. This keeps themes portable, easier to share, and less likely to break on another user's machine.