Silverlight4 动态改变界面的样式
最近看了下关于sl4动态改变界面的功能,在此做下记录。
首先,你要有个整体的样式文件,像sl tools就提供了好几种样式,我使用的就是其中的
ShinyBlue.xaml文件(确保添加这个文件时,xaml代码下面没有波浪线)。
在界面上放一些控件,看到时候样式变了没。然后放一个按钮来触发改变样式事件。
重点来了:
private void button1_Click(object sender, RoutedEventArgs e)
{
string url=url = "SL;component/Assets/Themes/ShinyBlue.xaml";//样式地址
var themeUri = new Uri(
url, UriKind.Relative);
if (Resources.MergedDictionaries.Count > 0)
{
Resources.MergedDictionaries.RemoveAt(0);//移除旧的样式
}
var themeResource = Application.GetResourceStream(themeUri);
using (var stream = themeResource.Stream)
{
using (var reader = new StreamReader(stream))
{
var xamlText = reader.ReadToEnd();
var dict = XamlReader.Load(xamlText) as ResourceDictionary;
Resources.MergedDictionaries.Add(dict);//添加新的样式。
}
}
}
{
string url=url = "SL;component/Assets/Themes/ShinyBlue.xaml";//样式地址
var themeUri = new Uri(
url, UriKind.Relative);
if (Resources.MergedDictionaries.Count > 0)
{
Resources.MergedDictionaries.RemoveAt(0);//移除旧的样式
}
var themeResource = Application.GetResourceStream(themeUri);
using (var stream = themeResource.Stream)
{
using (var reader = new StreamReader(stream))
{
var xamlText = reader.ReadToEnd();
var dict = XamlReader.Load(xamlText) as ResourceDictionary;
Resources.MergedDictionaries.Add(dict);//添加新的样式。
}
}
}
上面的样式文件是要放在sl端的。
如果你觉得放在sl端比较大的话,那可以放在web端,在需要时进行下载,然后变换样式。