原文:Windows 8实例教程系列 - 自定义应用风格

Windows 8 XAML实例教程中,曾经提及过应用风格设计方法以及如何创建可复用样式代码。本篇将深入讨论如何创建自定义Windows8应用风格。

随着计算机硬件性能的提升,用户对于软件应用的体验性要求越来越高,而应用的风格设计也成为衡量应用成功与否的一个标准。

模板样式基础

在XAML实例教程中曾介绍过,Windows8样式应用可以根据应用范围不同进行分类,

1. 局部资源(Page Resources),该样式模板代码位于当前页面中,其效果仅有效于当前页面,其基本语法格式如下:

<Page.Resources>

<资源定义 />

</Page.Resources>

2. 全局资源(Resources Dictionary),该样式模板代码位于资源字典文件中,其效果可以被应用于整个项目,其基本语法格式如下:

<根元素对象.Resources>
     <资源定义 />
</根元素对象.Resources>
在定义Resources Dictionary后,则需要在App.xaml中声明该资源字典,使其全局化,其定义方法如下:
 

对比两者,第二种方法更加有利于资源样式代码的重复利用以及代码维护,所以微软推荐开发人员尽量使用全局资源的方式定义项目样式。

模板样式调用

无论使用以上任何一种样式声名方法,其调用方法是相同的,代码如下:

<TextBlock Style="{StaticResource PageHeaderTextStyle}"/>

其中PageHeaderTextStyle是模板样式名称。

Windows 8默认应用模板样式

在实际项目开发中,微软建议开发和设计人员基于微软默认样式模板创建或者修改应用样式,使用Visual Studio提供的默认模板样式创建Windows8项目,然后根据项目需求创建布局控件以及交互控件,创建逻辑代码等。

本篇将使用Visual C# - Windows Store - Split App(XAML)模板做为演示。

首先使用Visual Studio 2012创建一个项目,

Visual Studio自动生成项目结构,其中包括简单页面代码以及基本样式代码。

默认项目模板样式代码都在StandardStyles.xaml文件中,

默认样式代码生成的应用界面如下:

下面我们将进行简单修改应用样式,生成新的应用界面如下:

首先修改应用名称,在ItemsPage.xaml页面中,Text="{StaticResource AppName}"尝试从App.xaml中调用应用名称,

<TextBlock x:Name="pageTitle" Grid.Column="1" Text="{StaticResource AppName}" IsHitTestVisible="false" Style="{StaticResource PageHeaderTextStyle}"/>

在App.xaml中修改,

<x:String x:Key="AppName">Windows Store Controls</x:String>

然后进入StandardStyles.xaml文件,通过快速浏览可以发现代码中有许多相关注释代码,例如:

开发人员可以根据需求查找对应控件样式代码进行修改。

在StandardStyles.xaml文件中搜索"LayoutRootStyle",该样式名是控制布局页面根样式代码,

 <Style x:Key="LayoutRootStyle" TargetType="Panel">
<Setter Property="Background" Value="{StaticResource ApplicationPageBackgroundThemeBrush}"/>
<Setter Property="ChildrenTransitions">
<Setter.Value>
<TransitionCollection>
<EntranceThemeTransition/>
</TransitionCollection>
</Setter.Value>
</Setter>
</Style>

在代码中,应用背景是由ApplicationPageBackgroundThemeBrush定义,为了修改应用背景,首先在项目中查找ApplicationPageBackgroundThemeBrush资源,通过搜索可以发现,在默认模版项目中,没有ApplicationPageBackgroundThemeBrush资源定义代码,这是因为Windows Store应用默认风格资源是定义保存在本地目录中, ..\(Program Files)\windows kits\8.0\Include\winrt\xaml\design 目录,

根据微软的建议,我们不需要直接修改默认风格资源,而只需要在当前StandardStyles.xaml文件中重新定义ApplicationPageBackgroundThemeBrush即可替换默认模板风格。

在StandardStyles.xaml文件中添加以下代码:

<SolidColorBrush x:Key="ApplicationPageBackgroundThemeBrush" Color="#018297"/>

在完成应用背景修改后,我们可以根据上面所诉方法,重新定义应用字体样式,鼠标样式以及默认按钮样式等,添加以下代码到StandardStyles.xaml文件,

<SolidColorBrush x:Key="ApplicationForegroundThemeBrush" Color="#FFFFFF"/>

    <SolidColorBrush x:Key="ApplicationSecondaryForegroundThemeBrush" Color="#FF991100"/>

    <SolidColorBrush x:Key="ApplicationPointerOverForegroundThemeBrush" Color="#AAAAAA"/>

    <SolidColorBrush x:Key="BackButtonBackgroundThemeBrush" Color="#00000000"/>

    <SolidColorBrush x:Key="BackButtonForegroundThemeBrush" Color="#FFFFFF"/>

    <SolidColorBrush x:Key="BackButtonPressedBackgroundThemeBrush" Color="#00000000"/>

    <SolidColorBrush x:Key="BackButtonPressedForegroundThemeBrush" Color="#CCCCCC"/>

    <SolidColorBrush x:Key="BackButtonPointerOverBackgroundThemeBrush" Color="#00000000"/>

    <SolidColorBrush x:Key="ListViewItemPlaceholderBackgroundThemeBrush" Color="#306772"/>

修改Tiles磁片样式,从ItemPage.xaml中可以看到,ListView是承载磁片绑定数据的控件,其资源样式模板使用的Standard80ItemTemplate,

<ListView
x:Name="itemListView"
AutomationProperties.AutomationId="ItemsListView"
AutomationProperties.Name="Items"
TabIndex="1"
Grid.Row="1"
Visibility="Collapsed"
Margin="0,-10,0,0"
Padding="10,0,0,60"
ItemsSource="{Binding Source={StaticResource itemsViewSource}}"
ItemTemplate="{StaticResource Standard80ItemTemplate}"
SelectionMode="None"
IsSwipeEnabled="false"
IsItemClickEnabled="True"
ItemClick="ItemView_ItemClick"/>

通过在StandardStyles.xaml文件中搜索Standard80ItemTemplate,可以发现模板是通过图片的形式控制Tile的背景,所以,我们可以通过修改图片的方式修改Tile的背景效果,

    <DataTemplate x:Key="Standard80ItemTemplate">
<Grid Margin="6">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}" Width="60" Height="60">
<Image Source="{Binding Image}" Stretch="UniformToFill"/>
</Border>
<StackPanel Grid.Column="1" Margin="10,0,0,0">
<TextBlock Text="{Binding Title}" Style="{StaticResource ItemTextStyle}" MaxHeight="40"/>
<TextBlock Text="{Binding Subtitle}" Style="{StaticResource CaptionTextStyle}" TextWrapping="NoWrap"/>
</StackPanel>
</Grid>
</DataTemplate>

在项目的Assets目录下,可以找到相关背景图片,根据需求,我将修改好的图片复制覆盖到当前目录,

在编译运行项目前,需要对启动屏幕进行简单的背景设置,在项目目录中,双击”package.appxmanifest“,即可进入应用装配列表窗口,

在该窗口,点击”Splash Screen“,在”Background color“中设置背景代码”#018297“

编译运行项目,应用界面效果如下:

以上是本篇实例,简单介绍如何创建自定义应用风格。大家可以根据该方法扩展修改具体控件样式模板和风格,相关内容将在后文创建自定义控件时介绍。

本篇实例源代码

这里推荐一款由国人开发的优秀开源Windows8控件主题 - Sugar UI

SugarUI专为开发者设计;该套装包含Sweet和Solid两组自定义控件样式以及一组增强控件。两组控件样式充满个性且不失Windows Store App的风格;亮暗两版随意切换,适用于各种配色方案。一组增强控件提供了针对一些常用功能的支持,节省了开发时间;UI视觉新颖、适配性强;交互形式流畅、创新、用户体验优秀。

控件支持网站:http://www.redsafi.com/sugarui/index_cn.html

最新版源代码下载:https://github.com/RedSafi-UX/SugarUI

Sugar UI 源代码本地下载

欢迎大家留言讨论学习Windows 8应用开发,希望能够看到更多优秀的Windows store应用。

欢迎大家加入QQ技术群,一起学习讨论Windows 8&Silverlight&WPF&Widnows Phone开发技术。 
22308706(一群) 超级群500人 
37891947(二群) 超级群500人 
100844510(三群) 高级群200人 
32679922(四群) 超级群500人 
23413513(五群) 高级群200人 
32679955(六群) 超级群500人 
88585140(八群) 超级群500人 
128043302(九群 企业应用开发推荐群) 高级群200人 
101364438(十群) 超级群500人

Windows 8实例教程系列 - 自定义应用风格的更多相关文章

  1. Windows 8实例教程系列 - 理解应用框架

    原文:Windows 8实例教程系列 - 理解应用框架 Windows 操作系统之所以风靡世界,是因为其“易学易用”,从用户的角度出发,让数以万计的非IT人员使用计算机实现娱乐,工作等目的.Windo ...

  2. Windows 8实例教程系列 - 数据绑定高级实例

    原文:Windows 8实例教程系列 - 数据绑定高级实例 上篇Windows 8实例教程系列 - 数据绑定基础实例中,介绍Windows 8应用开发数据绑定基础,其中包括一些简单的数据绑定控件的使用 ...

  3. Windows 8实例教程系列 - 数据绑定基础实例

    原文:Windows 8实例教程系列 - 数据绑定基础实例 数据绑定是WPF,Silverlight以及Windows Phone应用开发中最为常用的开发技术,在基于XAML的Windows Stor ...

  4. Windows 8实例教程系列 - 开篇

    原文:Windows 8实例教程系列 - 开篇 2012年10月26日,微软发布Windows 8操作系统以及自主品牌平板电脑Surface,Windows作为世界上最流行的操作系统,发布一周内,下载 ...

  5. Windows 8实例教程系列 - 布局控制

    原文:Windows 8实例教程系列 - 布局控制 与传统应用类似,Windows store应用允许开发人员通过布局控件管理应用UI. 本篇将讨论Windows8布局设计控制. Windows 8布 ...

  6. Silverlight,Windows 8应用开发实例教程系列汇总

    Kevin Fan分享开发经验,记录开发点滴 Silverlight,Windows 8应用开发实例教程系列汇总 2012-06-18 01:05 by jv9, 2145 阅读, 3 评论, 收藏, ...

  7. XAML实例教程系列 - 类型转换器(Type Converter)七

    XAML实例教程系列 - 类型转换器(Type Converter) 分类: Windows 8 Silverlight2012-06-25 13:40 961人阅读 评论(0) 收藏 举报 butt ...

  8. XAML实例教程系列 - 资源(Resources)

    Kevin Fan分享开发经验,记录开发点滴 XAML实例教程系列 - 资源(Resources) 2012-08-10 12:47 by jv9, 1386 阅读, 1 评论, 收藏, 编辑 在Wi ...

  9. XAML实例教程系列 - 命名空间(NameSpace) 三

    XAML实例教程系列 - 命名空间(NameSpace) 2012-05-28 14:14 by jv9, 2205 阅读, 10 评论, 收藏, 编辑 上一篇曾提及XAML中,每个对象元素的声明是对 ...

随机推荐

  1. SWT中的多线程(Invalid thread access)

    最近在学习swt的东西,遇到一个问题,特转录如下. SWT异常: org.eclipse.swt.SWTException: Invalid thread access 在创建SWT界面的线程之外的线 ...

  2. Java LinkedBlockingQueue和ArrayBlockingQueue分析

    LinkedBlockingQueue是一个链表实现的堵塞队列,在链表一头增加元素,假设队列满.就会堵塞.还有一头取出元素.假设队列为空.就会堵塞. LinkedBlockingQueue内部使用Re ...

  3. hdu 5015 233 Matrix(构造矩阵)

    http://acm.hdu.edu.cn/showproblem.php?pid=5015 由于是个二维的递推式,当时没有想到能够这样构造矩阵.从列上看,当前这一列都是由前一列递推得到.依据这一点来 ...

  4. CSS selectors for Selenium with example,selenium IDE

    CSS selectors for Selenium with example http://seleniumeasy.com/selenium-tutorials/css-selectors-tut ...

  5. BC 2015在百度之星程序设计大赛 - 预赛(1)(KPI-树董事长)

    KPI Accepts: 517 Submissions: 2185 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 ...

  6. 重构ConditionHelper

    在上一篇日志写了ConditionHelper的具体实现方法和它的用法,但那时只是把心里所想的一个思路用代码记录下来,而没有经过实践检 验的,难免存在一些问题,但在最近的一个新项目中用到Conditi ...

  7. 基于 Groovy 的自动化构建工具 Gradle 入门(转)

    本人工作之初没有使用自动化构建,后来敏捷了,开始使用 Ant - 完全面向过程的定义步骤,不进行依赖管理.再发展到 Maven,面向对象的方式管理工程,有了依赖的管理,JAR 包统一从中央仓库获得,保 ...

  8. JavaWeb学习总结(一)JavaWeb开发入门

    静态网页和动态网页 静态网页:在服务器上没有经过服务器解释执行的网页. 动态网页:在服务器上经过服务器解释执行的网页. 无论是静态网页还是动态网页,客户端看到的网页都是由HTML所构成的,所以Java ...

  9. asp.net Login控件基本属性及事件说明

    原文:asp.net Login控件基本属性及事件说明 Login系列控件是微软为了简化我们的开发过程,为我们进行常规的安全开发提供块捷途径. Login系列控件包含下列控件: Login 登录控件 ...

  10. Android permission 访问权限

    程序执行需要读取到安全敏感项必需在androidmanifest.xml中声明相关权限请求, 完整列表如下: android.permission.ACCESS_CHECKIN_PROPERTIES ...