如何在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}" />
有没有办法实现这个目标?
答案 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);