Search code examples
wpfdynamicresourcestaticresource

WPF from DynamicResource to StaticResource


I had been working on a WPF project for a while, but haven't touched it in 2 months now. Now that I'm back on it, I have the following problem:

I use merged dictionaries to create skins, and easily swap them at runtime. However, each skin does not change at runtime. But while I was noobish at this, I just followed a bunch of tutorials, and I used DynamicResource everywhere, not even wondering if I should rather use StaticResource.

The result is that when I tried sending my app to a friend using windows XP (i use seven). The Luna theme is thrown over my app, making the design ugly... And as far as I understood it comes from DynamicResource.

So now, I want to change to StaticResource, I simply tried to replace every "DynamicResource" with "StaticResource". And it throws me this exception:

Message = "'La valeur fournie sur 'System.Windows.StaticResourceExtension' a levé une exception.' numéro de ligne '8' et position de ligne '230'."

In english, it means: Message = "'The value given to 'System.Windows.StaticResourceExtension' threw an exception.' line number '8' and position on the line '230'.

I then put a try/catch block to have a better idea of the problem:

{"Impossible de trouver la ressource nommée'styleBackground'. Les noms de ressources respectent la casse."}

In english: Impossible to find the resource named 'styleBackground'. The resource names are case sensitive.

It's about a TabItem.

So two questions here: Am I doing the right thing by changing DynamicResource to StaticResource? And if so, what do I need to do?

Thanks,

FB.

EDIT: the program gets the error on the last of these lines:

<Window x:Class="Sc2ReplayMonkey.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
        xmlns:local="clr-namespace:Sc2ReplayMonkey" ResizeMode="CanResize"
        Title="Starcraft II Replay Monkey"
        Width="991" Icon="Resources\Icons\SC2_Replay_Monkey.png"
        WindowStartupLocation="CenterScreen" mc:Ignorable="d" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" d:DesignHeight="1024" Height="774" Visibility="Visible" Foreground="#00000000" Margin="0">

Solution

  • The solution was to load all resourcedictionaries at startup instead of starting with no skin (which works with dynamic resource) and letting the user chose a skin at runtime.