0

如何在 Silverlight 中使用动态 ResourceDictionary Source?我的应用程序有一个“Styles.xaml”,其中包含很多样式定义,并引用了一个“Colors.xaml”,其中定义了几个画笔:

样式.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>

颜色.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 回答