0

Silverlightで動的なResourceDictionaryソースを使用するにはどうすればよいですか?私のアプリには、多くのスタイル定義を持つ1つの「Styles.xaml」があり、いくつかのブラシが定義されている「Colors.xaml」を参照しています。

Styles.xaml:

<ResourceDictionary>
  <ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="/Project;component/Colors.xaml" />
  </ResourceDictionary.MergedDictionaries>
  <DataTemplate x:Key="MyLayoutTemplate">
    <Button Background="ButtonBackgroundBrush">Button Title</Button>
  </DataTemplate>
  <!-- A lot of other definitions -->
</ResourceDictionary>

Colors.xaml:

<ResourceDictionary>
  <SolidColorBrush x:Key="ButtonBackgroundBrush" Color="#FFFFFFFF"/>
  <!-- ... -->
</ResourceDictionary>

つまり、基本的にStyles.xamlはレイアウトを定義し、Colors.xamlは色を定義します(duh)。私のApp.xamlは、このStyles.xamlのみを参照しています。

私が必要としているのは、これを使用しない方法です。

<ResourceDictionary Source="/Project;component/Colors.xaml" />

そして、これが動的に定義される静的クラスにこのSourceプロパティを「ポイント」(またはバインド)します。このようなもの:

<ResourceDictionary Source="{Binding Settings.ThemeUri}" />

これを達成する方法はありますか?

4

1 に答える 1

0

これは実際には XAML でのみ実現できますが、コードで辞書を作成するのは簡単です。

ResourceDictionary styleDictionary = new ResourceDictionary()
{
    Source = new Uri("/Project;component/Styles.xaml", UriKind.Absolute)
};
ResourceDictionary colorDictionary = new ResourceDictionary()
{
    Source = new Uri("/Project;component/Colors.xaml", UriKind.Absolute)
};

styleDictionary.MergedDictionaries.Add(colorDictionary);
Application.Current.Resources.MergedDictionaries.Add(styleDictionary);
于 2013-03-05T18:06:30.107 に答える