3

I'm trying to implement 2 different themes for a WPF Application. I found this excellent post by @bendewey: "Can WPF themes be used to include multiple skins for an application that can be changed at runtime?"

And have used it to implement two themes. I have created two Resource Folders, Lets call them ResourcesTheme1 and ResourcesTheme2 and Two Xaml Resource Dictionary files (Style1.xaml & Style2.xaml) that have the styles.

With this I have been able to set the following styles: In Style1.xaml

<Style x:Key="HomeViewBackGroundImage" TargetType="Image">
        <Setter Property="Source" Value="/ResourcesTheme1/Background.png" />
</Style>

In Style2.xaml

<Style x:Key="HomeViewBackGroundImage" TargetType="Image">
        <Setter Property="Source" Value="/ResourcesTheme2/Background.png" />
</Style>

And this has worked a treat for me (if there's a better way please feel free to suggest it).

No the problem I have is that within my mainPage xaml I want to put on a row of buttons and each button has it's own image that it get's from binding to an ObservableCollection. I would like the Binding to look into the correct resource folder, but don't know how to make it happen without writing code behind.

So what I have is the following Binding:

 <Image Name="ContentImage" Source="{Binding ImageName}" Stretch="UniformToFill">

And the following code behind:

 if (useTheme1)
            {
                imageName = "/PlayingWithThemes;component/ResourcesTheme1/" + imageFileName;
            }
            else
            {
                imageName= "/PlayingWithThemes;component/ResourcesTheme2/" + imageFileName;
            }

Any thoughts on how I could make the source for the image something like:

Source="ResourceFoler + {Binding ImageName}"

Or is there something more generic than:

/PlayingWithThemes;component/ResourcesTheme1/"

That I could use.

Thanks in advance.

A

Community
  • 1
  • 1
AidanO
  • 868
  • 1
  • 11
  • 33

0 Answers0