windows phone (12) 小试自定义样式
原文:windows phone (12) 小试自定义样式

样式在BS开发中经常用到,在wp中系统也提供了解决办法,就是对设置的样式的一种资源共享,首先是共享资源的位置,它是在App类中,之前我们已经有介绍到设置公共属性存放临时数据,可参考windows phone 三种数据共享的方式(8),同样共享的样式我们也在app类中实现,系统在App.xaml文件中已经给我们提供了Resources集合:

<!--应用程序资源-->
    <Application.Resources>
        
    </Application.Resources>

我们只需要在上面标签中加入我们自定义的样式即可,适用于此资源的对象是有FrameworkElement派生的类,此类派生类的列表如下:

Microsoft.Internal.Pivot.Controls.VisualTreeGraft
        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 x:Name="tbContent" Text="显示样式" HorizontalAlignment="Center" VerticalAlignment="Center">
            <TextBlock.Foreground>
                <StaticResource ResourceKey="lgBrush"></StaticResource>
            </TextBlock.Foreground>
        </TextBlock>

比较常用的书写是这样:

<TextBlock x:Name="tbContent" Text="显示样式" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="{StaticResource lgBrush}">
            </TextBlock>

可以看到这里有个大括号,它就是xaml标记扩展,在xaml标记扩展中是不能使用引号的,比如这里的lgBrush不能使用引号;上面两种方法实现的效果一样:即

此外我们还可以看到MainPage类在xaml文件中已经定义了Foreground,但是在tbContent中我们依然看到了我们自定义的颜色,这说明样式设置的优先级高于继承来的样式的优先级;以上两种方法是实现在xaml文件中对样式的使用,我们也可以在隐藏文件(.cs)进行访问,但是必须是在构造函数完成之后,例如我们可以这样访问刚刚定义的样式:

View Code

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 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,隐藏文件中设置前景色就可以是这样:(此处有疑问:根据教材中的说法,我怎么也获取不到设置的颜色)

tb.Foreground = lgBrush;

不需要实例化该自定义颜色,需要注意的是如果使用x:Name资源,该名称必须是在xaml文件中保持唯一性;


 上面的案例是说明怎么自定义某个属性(Foreground )的样式,下面是为特定的元素定义样式集合

<phone:PhoneApplicationPage>
<phone:PhoneApplicationPage.Resources>
        <Style x:Key="tbStyle" TargetType="TextBlock">

<Setter Property="HorizontalAlignment" Value="Center"></Setter>

</Style>
    </phone:PhoneApplicationPage.Resources>
</phone:PhoneApplicationPage>

上面实例代码中x:Key表示键名,在使用该样式的时候会用到,TargetType是指此样式的使用对象元素,Style标签中Setter标签是设置适用此样式的元素属性;

实例代码:

<phone:PhoneApplicationPage>
    <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标记扩展得到该样式:

<TextBlock x:Name="tbContent" Text="显示样式" HorizontalAlignment="Center" VerticalAlignment="Center" Style="{StaticResource tbStyle}"  />

得到的效果是这样子的:

posted on 2014-03-05 14:59 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/3582497.html

windows phone (12) 小试自定义样式相关推荐

  1. 如何修补Windows Vista以启用自定义主题(视觉样式)

    Have you ever wondered why Windows Vista allows you to choose themes, but there's no way to add cust ...

  2. MarkdownPad 2的安装、配置、优化,自定义样式、生成目录,解决win10渲染错误等

    文章目录 1.Markdown 介绍 2.Markdown 编辑器 3.MarkdownPad 2 的安装.配置 3.1.下载 3.2.安装 3.3.申请购买序列号 4.异常 4.1.在win10下, ...

  3. DataGrid中页导航栏的自定义样式

    我们可以利用DataGrid的ItemCreat()方法来实现DataGrid中页脚(Foot)和页导航栏的自定义样式.ItemCreat,顾名思义,就是在数据项创建时发生的事件,对于DataGrid ...

  4. Matplotlib(三) rcParams 自定义样式控制

      在上一篇 python matplotlib入门(二) Matplotlib 作图生命周期 中,其中一个重要环节是 自定义图像(Customizing Matplotlib),从某种角度来讲,其实 ...

  5. WPF初学——自定义样式

    在WPF开发界面的过程中,经常会遇到多个相同种类的控件样式也是统一的,但是要一个一个地去设置,即使是复制粘贴都嫌累,所以翻了些书,网上度娘了一些材料,发现WPF有很容易的方式解决我的纠结,那就是--自 ...

  6. easyexcel 设置标题_使用easyexcel完成复杂表头及标题的导出功能(自定义样式)

    如需客户端指定excel版本,只需要判断后缀名然后在controller中的.excelType(ExcelTypeEnum.XLS)做指定输出内容格式即可 ***(注意表格行高列宽统一设置是在实体类 ...

  7. android 滚动条自定义样式,IScroll的使用-方向键绑定自定义滚动条样式

    之前在webkit上开发一个滚动控件,需要完成的是一段文字,上下键可以滚动,且自定义滚动条.第一想法就是浏览器原生overflow:scroll,且webkit支持自定义滚动条样式: webkit自定 ...

  8. WPF自定义控件与样式(4)-CheckBox/RadioButton自定义样式

    原文:WPF自定义控件与样式(4)-CheckBox/RadioButton自定义样式 一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等, ...

  9. C#中如何截取Windows消息来触发自定义事件

    原文 C#中如何截取Windows消息来触发自定义事件 在c#windows开发中,我们常常会遇到拦截windows消息,来触发某个特定任务的问题. 由于目前使用c#的开发人员非常多,而且大多数c#程 ...

最新文章

  1. Windows环境 安装dlib cv2(python) 总结
  2. Leetcode 143. 重排链表
  3. How does model reference pass from app view to master view
  4. 2019 CCPC-Wannafly Winter Camp Div2 Day1
  5. PJSIP学习笔记——PJSUA层发起呼叫的主要流程
  6. JVM面试1 :谈谈你对Java的理解
  7. android得到assets下面的资源
  8. android MVC和MVP探讨
  9. 【读书笔记】《王道论坛计算机考研机试指南》第二章
  10. dtw算法 c语言实现,DTW算法的python实现
  11. vb2008 获取u盘id_【干货】纯 windows 系统绕苹果ID解锁,傻瓜式的教程
  12. 路由器下一跳地址怎么判断_Tracert命令详解,路由跟踪命令tracert命令怎么用?...
  13. 微信任意用户密码修改漏洞分析
  14. [置顶] 图灵访谈系列之九:CNode社区谈Node.js技术及生态
  15. autojs免root脚本引擎编写的QQ空间点赞脚本源码
  16. Go(Golang)_12_竞态
  17. Win10沙盒功能,系统自带免费免安装
  18. oracle开放查询表权限_Oracle创建用户并给用户授权查询指定表或视图的权限
  19. crh寄存器_寄存器简写
  20. Direct3D基础——预备知识:表面

热门文章

  1. pro*C/C++支持c++开发实例
  2. ant中table表格的多选框如何清空
  3. [react] React的触摸事件有哪几种?
  4. 前端学习(3323):高级设计说闭包
  5. 前端学习(2995):vue+element今日头条管理--代码测试规范
  6. [html] 如何解决input在Firefox和Chrome中高度不一致的问题?
  7. [css] 对比下px、em、rem有什么不同?
  8. [css] 列举CSS优化、提高性能的方法
  9. 前端学习(2618):vue插槽--默认插槽
  10. 前端学习(1351)模板引擎