windows phone (12) 小试自定义样式
样式在BS开发中经常用到,在wp中系统也提供了解决办法,就是对设置的样式的一种资源共享,首先是共享资源的位置,它是在App类中,之前我们已经有介绍到设置公共属性存放临时数据,可参考windows phone 三种数据共享的方式(8),同样共享的样式我们也在app类中实现,系统在App.xaml文件中已经给我们提供了Resources集合:
<Application.Resources>
</Application.Resources>
我们只需要在上面标签中加入我们自定义的样式即可,适用于此资源的对象是有FrameworkElement派生的类,此类派生类的列表如下:
System.Windows.Controls.Border
System.Windows.Controls.ContentPresenter
System.Windows.Controls.Control
System.Windows.Controls.DrawingSurface
System.Windows.Controls.Image
System.Windows.Controls.ItemsPresenter
System.Windows.Controls.MediaElement
System.Windows.Controls.MultiScaleImage
System.Windows.Controls.Panel
System.Windows.Controls.Primitives.Popup
System.Windows.Controls.RichTextBlock
System.Windows.Controls.RichTextBlockOverflow
System.Windows.Controls.TextBlock
System.Windows.Controls.Viewbox
System.Windows.Controls.WebBrowser
System.Windows.Documents.Glyphs
System.Windows.Shapes.Shape
以上类或者以上类中派生的类都可以使用此共享资源,这里是指自定义样式,接下来按照上一篇内容的做法,我们给内容区域的Textblock设置前景色,所以在App.xaml 自定义样式可以这样:
<Application.Resources>
<LinearGradientBrush x:Key="lgBrush">
<GradientStop Offset="0" Color="AliceBlue"></GradientStop>
<GradientStop Offset="1" Color="BurlyWood"></GradientStop>
</LinearGradientBrush>
</Application.Resources>
x:Key特性是唯一标示该资源的一个键名,在共享资源中必须唯一;自定义样式定义好了,怎么使用那,比较繁琐的做法是这样,不提倡:
<TextBlock.Foreground>
<StaticResource ResourceKey="lgBrush"></StaticResource>
</TextBlock.Foreground>
</TextBlock>
比较常用的书写是这样:
</TextBlock>
可以看到这里有个大括号,它就是xaml标记扩展,在xaml标记扩展中是不能使用引号的,比如这里的lgBrush不能使用引号;上面两种方法实现的效果一样:即
此外我们还可以看到MainPage类在xaml文件中已经定义了Foreground,但是在tbContent中我们依然看到了我们自定义的颜色,这说明样式设置的优先级高于继承来的样式的优先级;以上两种方法是实现在xaml文件中对样式的使用,我们也可以在隐藏文件(.cs)进行访问,但是必须是在构造函数完成之后,例如我们可以这样访问刚刚定义的样式:
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 ShareStyle
{
public partial class MainPage : PhoneApplicationPage
{
// 构造函数
public MainPage()
{
InitializeComponent();
LinearGradientBrush lgBrush = (LinearGradientBrush)this.Resources["lgBrush"];
TextBlock tb = new TextBlock();
tb.Name = "tbName";
tb.VerticalAlignment = VerticalAlignment.Center;
tb.HorizontalAlignment = HorizontalAlignment.Center;
tb.Text = "隐藏代码实例化的";
tb.Foreground = lgBrush;
this.ContentPanel.Children.Add(tb);
}
}
}
如果想使用该样式的话,就像上面的代码实例化样式,并设置Textblock的前景色为lgBrush,还有另一种写法是将自定义样式中的x:Key改为x:Name,隐藏文件中设置前景色就可以是这样:(此处有疑问:根据教材中的说法,我怎么也获取不到设置的颜色)
不需要实例化该自定义颜色,需要注意的是如果使用x:Name资源,该名称必须是在xaml文件中保持唯一性;
上面的案例是说明怎么自定义某个属性(Foreground )的样式,下面是为特定的元素定义样式集合
<phone:PhoneApplicationPage.Resources>
<Style x:Key="tbStyle" TargetType="TextBlock">
</Style>
</phone:PhoneApplicationPage.Resources>
</phone:PhoneApplicationPage>
上面实例代码中x:Key表示键名,在使用该样式的时候会用到,TargetType是指此样式的使用对象元素,Style标签中Setter标签是设置适用此样式的元素属性;
实例代码:
<phone:PhoneApplicationPage.Resources>
<Style x:Key="tbStyle" TargetType="TextBlock">
<Setter Property="HorizontalAlignment" Value="Center"></Setter>
<Setter Property="HorizontalAlignment" Value="Center"></Setter>
<Setter Property="Foreground">
<Setter.Value>
<LinearGradientBrush>
<GradientStop Offset="0.2" Color="Brown"></GradientStop>
<GradientStop Offset="0.7" Color="DarkBlue"></GradientStop>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Style>
</phone:PhoneApplicationPage.Resources>
</phone:PhoneApplicationPage>
在TextBlock元素中的使用xaml标记扩展得到该样式:
得到的效果是这样子的:
转载于:https://www.cnblogs.com/lonelyxmas/p/3582497.html
windows phone (12) 小试自定义样式相关推荐
- 如何修补Windows Vista以启用自定义主题(视觉样式)
Have you ever wondered why Windows Vista allows you to choose themes, but there's no way to add cust ...
- MarkdownPad 2的安装、配置、优化,自定义样式、生成目录,解决win10渲染错误等
文章目录 1.Markdown 介绍 2.Markdown 编辑器 3.MarkdownPad 2 的安装.配置 3.1.下载 3.2.安装 3.3.申请购买序列号 4.异常 4.1.在win10下, ...
- DataGrid中页导航栏的自定义样式
我们可以利用DataGrid的ItemCreat()方法来实现DataGrid中页脚(Foot)和页导航栏的自定义样式.ItemCreat,顾名思义,就是在数据项创建时发生的事件,对于DataGrid ...
- Matplotlib(三) rcParams 自定义样式控制
在上一篇 python matplotlib入门(二) Matplotlib 作图生命周期 中,其中一个重要环节是 自定义图像(Customizing Matplotlib),从某种角度来讲,其实 ...
- WPF初学——自定义样式
在WPF开发界面的过程中,经常会遇到多个相同种类的控件样式也是统一的,但是要一个一个地去设置,即使是复制粘贴都嫌累,所以翻了些书,网上度娘了一些材料,发现WPF有很容易的方式解决我的纠结,那就是--自 ...
- easyexcel 设置标题_使用easyexcel完成复杂表头及标题的导出功能(自定义样式)
如需客户端指定excel版本,只需要判断后缀名然后在controller中的.excelType(ExcelTypeEnum.XLS)做指定输出内容格式即可 ***(注意表格行高列宽统一设置是在实体类 ...
- android 滚动条自定义样式,IScroll的使用-方向键绑定自定义滚动条样式
之前在webkit上开发一个滚动控件,需要完成的是一段文字,上下键可以滚动,且自定义滚动条.第一想法就是浏览器原生overflow:scroll,且webkit支持自定义滚动条样式: webkit自定 ...
- WPF自定义控件与样式(4)-CheckBox/RadioButton自定义样式
原文:WPF自定义控件与样式(4)-CheckBox/RadioButton自定义样式 一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等, ...
- C#中如何截取Windows消息来触发自定义事件
原文 C#中如何截取Windows消息来触发自定义事件 在c#windows开发中,我们常常会遇到拦截windows消息,来触发某个特定任务的问题. 由于目前使用c#的开发人员非常多,而且大多数c#程 ...
最新文章
- Windows环境 安装dlib cv2(python) 总结
- Leetcode 143. 重排链表
- How does model reference pass from app view to master view
- 2019 CCPC-Wannafly Winter Camp Div2 Day1
- PJSIP学习笔记——PJSUA层发起呼叫的主要流程
- JVM面试1 :谈谈你对Java的理解
- android得到assets下面的资源
- android MVC和MVP探讨
- 【读书笔记】《王道论坛计算机考研机试指南》第二章
- dtw算法 c语言实现,DTW算法的python实现
- vb2008 获取u盘id_【干货】纯 windows 系统绕苹果ID解锁,傻瓜式的教程
- 路由器下一跳地址怎么判断_Tracert命令详解,路由跟踪命令tracert命令怎么用?...
- 微信任意用户密码修改漏洞分析
- [置顶] 图灵访谈系列之九:CNode社区谈Node.js技术及生态
- autojs免root脚本引擎编写的QQ空间点赞脚本源码
- Go(Golang)_12_竞态
- Win10沙盒功能,系统自带免费免安装
- oracle开放查询表权限_Oracle创建用户并给用户授权查询指定表或视图的权限
- crh寄存器_寄存器简写
- Direct3D基础——预备知识:表面
热门文章
- pro*C/C++支持c++开发实例
- ant中table表格的多选框如何清空
- [react] React的触摸事件有哪几种?
- 前端学习(3323):高级设计说闭包
- 前端学习(2995):vue+element今日头条管理--代码测试规范
- [html] 如何解决input在Firefox和Chrome中高度不一致的问题?
- [css] 对比下px、em、rem有什么不同?
- [css] 列举CSS优化、提高性能的方法
- 前端学习(2618):vue插槽--默认插槽
- 前端学习(1351)模板引擎