windows phone 换肤(2)
//这里有篇参考文章
http://www.cnblogs.com/tianhonghui/p/3373276.html#commentform
以下思路是来自徐老师,昨晚看了一个晚上球赛,睡了不到6个小时,又被人拉去游泳,现在各种困。。。
文字我就不多描述,直接上代码吧。
样式style
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:my="clr-namespace:System;assembly=mscorlib"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:System="clr-namespace:System;assembly=mscorlib">
<!--自定义一个画刷,也可以用系统,感觉不好控制,还是自己定义的好,实际项目没实战过,到时拿1、2项目练练手在汇报-->
<SolidColorBrush x:Key="S_SolidColorBrush">
<Color>#0478fb</Color>
</SolidColorBrush> <!--标题定义样式-->
<Style TargetType="TextBlock" x:Key="tbTitle">
<Setter Property="Foreground" Value="{StaticResource S_SolidColorBrush}" />
<Setter Property="FontSize" Value="" />
</Style> <!--ListBox里面文字定义样式-->
<Style TargetType="TextBlock" x:Key="listboxTitle">
<Setter Property="Foreground" Value="{StaticResource S_SolidColorBrush}" />
<Setter Property="FontSize" Value="" />
</Style>
</ResourceDictionary>
切换皮肤帮助类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Media; namespace 换皮肤WP
{ public class ThemeHelper
{
/// <summary>
/// 设置默认为绿色
/// </summary>
/// <param name="type"></param>
public static void ChangeTheme(ThemeType type = ThemeType.Green)
{
//默认颜色值
var color = Color.FromArgb(, 0x04, 0x78, 0xfb);
//var color = (Color)Application.Current.Resources["S_FontColor"];
switch (type)
{
case ThemeType.Green:
//color=Colors.Green;
//color=Color.FromArgb(255,4,120,255);
//上面方法都不推荐这么写,因为颜色值往往是从ps取出来。16进制0478fb
color = Color.FromArgb(, 0x04, 0x78, 0xfb);
break;
case ThemeType.Blue:
color = Color.FromArgb(, 0x04, 0xfb, 0x72);
break;
default:
//找不到也是默认值
color = Color.FromArgb(, 0x04, 0x78, 0xfb);
break;
} SetColor("S_FontColor", color);
} /// <summary>
/// 设置颜色
/// </summary>
/// <param name="key"></param>
/// <param name="color"></param>
private static void SetColor(string key, Color color)
{
if (Application.Current.Resources.Contains("S_SolidColorBrush"))
{
var brush = (SolidColorBrush)Application.Current.Resources["S_SolidColorBrush"];
brush.Color = color;
}
}
} public enum ThemeType
{
Green = ,
Blue = ,
//…自定义定义更多颜色
}
}
MainPage.xaml
<phone:PhoneApplicationPage
x:Class="换皮肤WP.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="" d:DesignHeight=""
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Portrait" Orientation="Portrait"
shell:SystemTray.IsVisible="True"> <!--LayoutRoot 是包含所有页面内容的根网格-->
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions> <!--TitlePanel 包含应用程序的名称和页标题-->
<StackPanel x:Name="TitlePanel" Grid.Row="" Margin="12,17,0,28">
<TextBlock x:Name="ApplicationTitle" Text="我的应用程序" Style="{StaticResource PhoneTextNormalStyle}"/>
<TextBlock x:Name="PageTitle" Text="换肤Demo" Margin="9,-7,0,0" Style="{StaticResource tbTitle}"/>
</StackPanel> <!--ContentPanel - 在此处放置其他内容-->
<Grid x:Name="ContentPanel" Grid.Row="" Margin="12,0,12,0">
<ListBox ItemsSource="{Binding Words}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" Style="{StaticResource listboxTitle}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Button Content="绿色" HorizontalAlignment="Left" Margin="82,512,0,0" VerticalAlignment="Top" Height="" Click="Button_Click_1"/>
<Button Content="黄色" HorizontalAlignment="Left" Margin="303,512,0,0" VerticalAlignment="Top" Height="" Click="Button_Click_2"/>
</Grid>
</Grid> </phone:PhoneApplicationPage>
MainPage.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls; namespace 换皮肤WP
{
public partial class MainPage : PhoneApplicationPage
{
//mvvm如果属性放到这里,绑定看构造函数
public List<string> Words { get; set; } // 构造函数
public MainPage()
{
InitializeComponent(); ThemeHelper.ChangeTheme(); //测试列表里面文字换肤
Words = new List<string>
{
"Hello word",
"Kennie",
"no zuo no die"
}; this.DataContext = this;
} private void Button_Click_1(object sender, RoutedEventArgs e)
{
ThemeHelper.ChangeTheme();
} private void Button_Click_2(object sender, RoutedEventArgs e)
{
ThemeHelper.ChangeTheme(ThemeType.Blue);
}
}
}
App引用样式
WP7<ResourceDictionary Source="Style/common.xaml" />
WP8写法不一样,自行去百度,实在不太多人不懂话,代码稍后再贴
下载Demo
windows phone 换肤(2)的更多相关文章
- Windows Phone 资源管理与换肤思考
新入手一台Windows 8的笔记本,安装了VS2013后,终于又可以开发WP了.公司暂时不愿意开发WP,那么咱就自行研究吧! 在没有WP开发环境的时候,曾经在WPF尝试了一下换肤功能的实现.最简单的 ...
- Qt编写可换肤的中文双拼汉字输入法
时间过得真快,不知不觉已到2015年,农历春节一眨眼就过去了,端正状态收拾心情整装待发出发. 曾经有段时间,我有一个很执着的梦想,我要导演出一部空前绝后的巨幕.不过现实无情地碾碎我的梦想,也同时将我推 ...
- 基于QT的换肤整体解决方案(QSkinStyle)(提供Linux的XP风格)
基于QT的换肤整体解决方案(QSkinStyle) 对QT这个成功的跨平台GUI库,本身内置了对换肤功能的实现,比如cleanlooks.plastique等跨平台风格:还有一些是和平台相关的风格,比 ...
- C# 实现对窗体(Form)换肤
http://www.csharpwin.com/csharpresource/2992.shtml 一直想写一个比较完整的.容易扩展的窗体换肤的方案,由于时间问题,都没去实现这个想法.现在有朋友提出 ...
- WPF换肤之四:界面设计和代码设计分离
原文:WPF换肤之四:界面设计和代码设计分离 说起WPF来,除了总所周知的图形处理核心的变化外,和Winform比起来,还有一个巨大的变革,那就是真正意义上做到了界面设计和代码设计的分离.这样可以让美 ...
- WPF换肤之五:创建漂亮的窗体
原文:WPF换肤之五:创建漂亮的窗体 换肤效果 经过了前面四章的讲解,我们终于知道了如何拖拉窗体使之改变大小,也知道了如何处理鼠标事件,同时,也知道了如何利用更好的编写方式来编写一个方便实用和维护的换 ...
- WPF换肤之三:WPF中的WndProc
原文:WPF换肤之三:WPF中的WndProc 在上篇文章中,我有提到过WndProc中可以处理所有经过窗体的事件,但是没有具体的来说怎么可以处理的. 其实,在WPF中,要想利用WndProc来处理所 ...
- WPF换肤之二:可拉动的窗体
原文:WPF换肤之二:可拉动的窗体 让我们接着上一章: WPF换肤之一:创建圆角窗体 来继续. 在这一章,我主要是实现对圆角窗体的拖动,改变大小功能. 拖动自绘窗体的步骤 首先,通过上节的设计,我们知 ...
- 浅谈DevExpress<一>:换肤
最近要用到devExpress,一句话,很好很强大,比起vs自带的winform界面,种类和花样要多了不少,然而,强力的功能带来了庞大的信息量,所以我打算通过一些小模块来和大家一起对它进行探讨和研究. ...
随机推荐
- Regex正则表达式
正则表达式 热身 正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串.将匹配的子串做替换或者从某个串中取出符合某个条件的子串等. 例如 g ...
- 关于服务端控件textbox的disabled属性设置为disabled后在服务端无法取值的问题
在asp.net 1.x版本中,当textbox控件的disabled属性设置为disabled的时候看,在服务端还是可以通过控件id.text获取到textbox的值的,只是不能输入值而已.但是在以 ...
- git学习3 - 克隆远程库到本地 将本地库上传到git
如何克隆远程版本库到本地 git clone URL 如何用命令将本地项目上传到git 1.(先进入项目文件夹)通过命令 git init 把这个目录变成git可以管理的仓库 (注意: cd C:/U ...
- Node.js的原型继承函数util.inherits
util.inherits(constructor, superConstructor)是一个实现对象间原型继承 的函数.JavaScript 的面向对象特性是基于原型的,与常见的基于类的不同.Jav ...
- java 删除文件夹 / 删除某文件夹下的所有文件
import java.io.File; /*************************删除文件夹delFolder / 删除文件夹中的所有文件delAllFile *start******** ...
- seureCRT快捷键
前言 secureCRT 是一个非常不错的终端软件,在嵌入式开发过程中经常使用到,所以了解一下其快捷键操作是非常有必要的,可以提高开发效率. 复制:[ctrl] + [shift] + c 粘贴 ...
- HTML5+ 初识,HBuilder,夜神模拟器,Webview
一.HTML5+ 初识 HTML5 Plus应用概述 HTML5 Plus移动App,简称5+App,是一种基于HTML.JS.CSS编写的运行于手机端的App,这种App可以通过扩展的JS API任 ...
- STM32使用无源蜂鸣器演奏歌曲
上一次使用了有源蜂鸣器,只能发出固定的”滴滴“声,当然不能满足于此呀.使用无源蜂鸣器,只要输出不同频率的PWM波,即可发出不同的音符. 不同的音符组合起来就是一个曲子了. 改变PWM的音调,可以输出D ...
- leetcode421
public class Solution { public int FindMaximumXOR(int[] nums) { , mask = ; ; i >= ; i--) { mask = ...
- REST的含义和RESTful架构入门
REST的含义和RESTful架构入门 提纲 1.REST架构的作用 2.REST和RESTful 3.REST的具体含义 3.1 资源实体 3.2 资源实体的表现层 3.3. 资源实体某一变现层的状 ...