zoukankan      html  css  js  c++  java
  • WPF:换肤基础(临摹贴)

    临摹对象《Creating a Skinned User Interface in WPF

    目标:动态变更窗口的底色(当然,可以扩展为其他元素的样式)
    思路:
    •   创建两个资源文件(Resource Dictionary),一个用来存放默认样式(Default.xaml),一个用来存放其他样式(HotHot.xaml);
    •   在需要变更样式的窗体中(本例中为:WinWords),使用动态样式(... Style="{DynamicResource styleBcakground}")
    •   在Application类中(方便调用),添加一个应用样式的公共方法(ApplySkin)
    •   在主窗体中(本例是在WinWords窗体中通过按钮点击事件)调用Application中应用样式方法(ApplySkin)
    •   在本例中,WinWords窗体启动时,自动调用了ApplySkin方法来应用默认的样式(Default)

    OK,代码如下:
    <HOME_DIR>\Resources\Skins\Default.xaml
     1     <!-- Background Style -->
     2     <Style x:Key="styleBackground">
     3         <Setter Property="Control.Background">
     4             <Setter.Value>
     5                 <LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5" Opacity="0.5">
     6                     <GradientStop Color="LightSkyBlue" Offset="0" />
     7                     <GradientStop Color="WhiteSmoke" Offset="0.5" />
     8                     <GradientStop Color="LightSkyBlue" Offset="1" />
     9                 </LinearGradientBrush>
    10             </Setter.Value>
    11         </Setter>
    12     </Style>

    <HOME_DIR>\Resources\Skins\HotHot.xaml
     1    <!-- Background Style -->
     2    <Style x:Key="styleBackground">
     3        <Setter Property="Control.Background">
     4            <Setter.Value>
     5                <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
     6                    <GradientStop Color="#50000000" Offset="0.5" />
     7                    <GradientStop Color="#ff999999" Offset="1" />
     8                </LinearGradientBrush>
     9            </Setter.Value>
    10        </Setter>
    11    </Style>

    <HOME_DIR>\WinWords.xaml
    1
    2    <Grid Style="{DynamicResource styleBackground}">
    3

    <HOME_DIR>\WinWords.xaml.cs
     1        public WinWords()
     2        {
     3            InitializeComponent();
     4            
     5            this.ApplySkin("Default");
     6        }
     7
     8        private void ApplySkin(string pstrDictPath)
     9        {
    10            string skinDictPath = @".\Resources\Skins\" + pstrDictPath + @".xaml";
    11            Uri skinDictUri = new Uri(skinDictPath, UriKind.Relative);
    12
    13            MyCcApp app = Application.Current as MyCcApp;
    14            app.ApplySkin(skinDictUri);
    15        }
    16        private void btnTestSkining_Click(object sender, RoutedEventArgs e)
    17        {
    18            this.ApplySkin("HotHot");
    19        }


    <HOME_DIR>\MyCcApp.xaml.cs
     1        public void ApplySkin(Uri skinDictionaryUri)
     2        {
     3            ResourceDictionary skinDict = Application.LoadComponent(skinDictionaryUri) as ResourceDictionary;
     4
     5            Collection<ResourceDictionary> mergedDicts = base.Resources.MergedDictionaries;
     6
     7            if (mergedDicts.Count > 0)
     8            {
     9                mergedDicts.Clear();
    10            }
    11
    12            mergedDicts.Add(skinDict);
    13        }

    哪里是关键大家自然一看就清楚了,查查MSDN,O了,^_^

  • 相关阅读:
    [CocosCreator]-06-文字渲染
    [CocosCreator]-05-图片渲染
    [CocosCreator]-04-使用对象池
    [CocosCreator]-03-使用计时器
    [CocosCreator]-02-设备重力传感事件
    [CocosCreator]-01-键盘事件
    [h5棋牌项目]-08-请安装所需的版本的 Windows SDK 或者在项目属性页的问题解决方案
    JS规则 较量较量(比较操作符) 两个操作数通过比较操作符进行比较,得到值为真(true)和假(false)。【>; <; >=; <=; !=;==】
    JS规则 自加一,自减一 ( ++和- -) 【mynum = mynum + 1;//等同于mynum++;】
    JS规则 我还有其它用途( +号操作符)例如,算术操作符(+、-、*、/等),比较操作符(<、>、>=、<=等),逻辑操作符(&&、||、!)
  • 原文地址:https://www.cnblogs.com/KingWorld/p/1032335.html
Copyright © 2011-2022 走看看