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


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

    ThemeManager

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

    代码
    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



  • 相关阅读:
    深入理解Java内存模型(二)——重排序
    Hadoop——认识篇
    深入理解Java内存模型(六)——final
    深入理解Java内存模型(一)——基础
    深入理解Java内存模型(三)——顺序一致性
    深入理解Java内存模型(五)——锁
    Coursera公开课笔记: 斯坦福大学机器学习第十一课“机器学习系统设计(Machine learning system design)”
    Coursera公开课笔记: 斯坦福大学机器学习第十课“应用机器学习的建议(Advice for applying machine learning)”
    深入理解Java内存模型(七)——总结
    深入理解Java内存模型(四)——volatile
  • 原文地址:https://www.cnblogs.com/zhoujg/p/1616784.html
Copyright © 2020-2023  润新知