信息系统开发平台OpenExpressApp - 支持WPF主题样式

  OpenExpressApp中有一个项目【OpenExpressApp.Module.WPF.Style】,它作为以后UI样式扩展用,以前只是放在那里,其实没有做什么工作,主要也就是告诉大家后期会增加主题样式。前期做框架、做引擎时,由于侧重点不一样,所以有时经常被人说做出来的东西真丑:)所以最近就花了两天把样式扩展加进来了。目前主要从网上下载了微软的一些样式,还没有扩充OEA内部控件的样式,界面如下图:

2009120410323697.jpg2009120411595852.jpg2009120412004519.jpg

ThemeManager

2009120410452866.jpg

  在【OpenExpressApp.Module.WPF.Style】中有一个ThemeManager.cs单元,这是主题管理的唯一一个类,其余都是各个主题的样式文件。这些都是从网上下载的,由于比较简单,就不做具体介绍了,只把代码附上:

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
public static class ThemeManager
{
public static ResourceDictionary GetThemeResourceDictionary( string theme)
{
if (theme != null )
{
// Assembly assembly = Assembly.LoadFrom("OpenExpressApp.Module.WPF.Style");
string packUri = String.Format( @" /OpenExpressApp.Module.WPF.Style;component/{0}/Theme.xaml " , theme);
return Application.LoadComponent( new Uri(packUri, UriKind.Relative)) as ResourceDictionary;
}
return null ;
}

public static string [] GetThemes()
{
string [] themes = new string []
{
" 朴素 " , " 朦胧蓝 " , " ExpressionDark " , " ExpressionLight " , " RainierOrange " , " RainierPurple " , " RainierRadialBlue " ,
" ShinyBlue " , " ShinyRed " , " ShinyDarkTeal " , // "ShinyDarkGreen",
" ShinyDarkPurple " ,
" DavesGlossyControls " , " WhistlerBlue " , " BureauBlack " , " BureauBlue " , " BubbleCreme " ,
" UXMusingsRed " , " UXMusingsGreen " , " UXMusingsRoughRed " , " UXMusingsRoughGreen " , " UXMusingsBubblyBlue "
};
return themes;
}

public static void ApplyTheme( this Application app, string theme)
{
ResourceDictionary dictionary
= ThemeManager.GetThemeResourceDictionary(theme);

if (dictionary != null )
{
app.Resources.MergedDictionaries.Clear();
app.Resources.MergedDictionaries.Add(dictionary);
}
}

public static void ApplyTheme( this ContentControl control, string theme)
{
ResourceDictionary dictionary
= ThemeManager.GetThemeResourceDictionary(theme);

if (dictionary != null )
{
control.Resources.MergedDictionaries.Clear();
control.Resources.MergedDictionaries.Add(dictionary);
}
}

#region Theme

/// <summary>
/// Theme Attached Dependency Property
/// </summary>
public static readonly DependencyProperty ThemeProperty =
DependencyProperty.RegisterAttached(
" Theme " , typeof ( string ), typeof (ThemeManager),
new FrameworkPropertyMetadata(( string ) string .Empty,
new PropertyChangedCallback(OnThemeChanged)));

/// <summary>
/// Gets the Theme property. This dependency property
/// indicates ....
/// </summary>
public static string GetTheme(DependencyObject d)
{
return ( string )d.GetValue(ThemeProperty);
}

/// <summary>
/// Sets the Theme property. This dependency property
/// indicates ....
/// </summary>
public static void SetTheme(DependencyObject d, string value)
{
d.SetValue(ThemeProperty, value);
}

/// <summary>
/// Handles changes to the Theme property.
/// </summary>
private static void OnThemeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
string theme = e.NewValue as string ;
if (theme == string .Empty)
return ;

ContentControl control
= d as ContentControl;
if (control != null )
{
control.ApplyTheme(theme);
}
}

#endregion

 

 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值