如何在Silverlight中使用动态ResourceDictionary源?

时间:2013-03-04 20:06:45

标签: c# silverlight

如何在Silverlight中使用动态ResourceDictionary源?我的应用程序有一个“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}" />

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分: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);