Posted on 2012-03-23 11:21 祥叔 阅读(2886) 评论(6) 编辑 收藏

在Web开发中,我们通过CSS来控制页面元素的样式,一般常用三种方式:

1.       内联样式表:即直接设置元素的style属性

2.       嵌入样式表:即在html页面上写一个<style>……..</style> 代码段,然后设置元素的class 属性

3.       外部样式表:即写一个独立的.css 文件,然后再html页面上引入该文件,然后设置元素的class属性

具体如何操作,这里就不说了。不懂的去百度一把,绝对会出现一大坨。

同样的,在WP7开发中,也有类似以上几种方式设置控件的样式——开发平台可以千差万别,编程思想都是大同小异的。

一,内联样式:

直接设置控件的Height 、Width、Foreground、HorizontalAlignment、VerticalAlignment 等属性。以设置一个Botton控件的样式为例,如:


    <Grid x:Name="ContentPanel" >
            <Button Content="Button" Name="btnDemo" 
                    Height="72" 
                    Width="150" 
                    Foreground="White" 
                    Background="Blue" 
                    HorizontalAlignment="Left" 
                    VerticalAlignment="Top" 
                    Margin="170,132,0,0" 
                    Grid.Row="1" />
          </Grid>

这种方式比较简单,但是代码不能复用。

 二,嵌入样式:

在页面<phone:PhoneApplicationPage.Resources> 节点下添加样式,然后在需要的控件上设置Style 属性。还是以上面那个Botton控件为例。

1,在页面<phone:PhoneApplicationPage.Resources>节点下添加一个Key值叫“BtnStyle”的样式


  <phone:PhoneApplicationPage.Resources>
        <Style x:Key="BtnStyle"  TargetType="Button">
            <Setter Property="Height" Value="72" />
            <Setter Property="Width" Value="150" />
            <Setter Property="Foreground" Value="White" />
            <Setter Property="Background" Value="Blue" />
            <Setter Property="HorizontalAlignment" Value="Left" />
            <Setter Property="VerticalAlignment" Value="Top" />
        </Style>
    </phone:PhoneApplicationPage.Resources>

2, 设置Botton 控件的Style 属性为"{StaticResource BtnStyle}"

   <Grid x:Name="ContentPanel" >
            <Button Content="Button" Name="btnDemo" 
                   Style="{StaticResource BtnStyle}"
                    Margin="170,132,0,0"  />
   </Grid>

解释一下,TargetType="Button" 指定了该样式适用于Botton类型的控件,Key="BtnStyle" 如果不设置该值,则该样式将适用于所有的Botton 控件,而设置了其值为“BtnStyle”,则只用于设置了  Style="{StaticResource BtnStyle}" 的Botton控件。这就好比CSS中的元素选择器和类选择器。

这种方式可以使得单个页面上的控件能够复用一个样式,比第一种方式面向对象了一步。

三,外联样式:

1,新建一个.xaml资源文件,如/Resources/BtnStyle.xaml

2, 在BtnStyle.xaml文件里编写样式代码


BtnStyle.xaml: 
<ResourceDictionary
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:System="clr-namespace:System;assembly=mscorlib">
    <Style x:Key="BtnStyle" TargetType="Button">
        <Setter Property="Height" Value="72" />
        <Setter Property="Width" Value="150" />
        <Setter Property="Foreground" Value="White" />
        <Setter Property="Background" Value="Blue" />
        <Setter Property="HorizontalAlignment" Value="Left" />
        <Setter Property="VerticalAlignment" Value="Top" />
    </Style>
</ResourceDictionary>

3,在App.xaml文件的<Application.Resources>

或者普通页面的<phone:PhoneApplicationPage.Resources>

或者用户控件的 <UserControl.Resources>  节点下

添加相应的ResourceDictionary,配置引用BtnStyle.xaml:


app.xaml:
    <Application.Resources> 
        
         <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Resources/BtnStyle.xaml"/>
            <!--<ResourceDictionary Source="Resources/BtnStyle2.xaml"/>
                <ResourceDictionary Source="Resources/BtnStyle3.xaml"/>-->
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
        
    </Application.Resources>
或者MainPage.xaml:
<phone:PhoneApplicationPage.Resources>         <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Resources/BtnStyle.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary> </phone:PhoneApplicationPage.Resources>

<ResourceDictionary.MergedDictionaries>节点下可以添加多个资源文件

这种方式相比前面两种使得样式和结构又更进一步分离了。

在App.xam引用,是全局的,可以使得一个样式可以在整个应用程序中能够复用。在普通页面中引用只能在当前页面上得到复用。

4, 设置Botton 控件的Style 属性为"{StaticResource BtnStyle}" 和上面的一样。

 四,用C#代码动态加载资源文件并设置样式

1,新建资源文件:同上面的1,2两步。

2,在后台编写代码

     ResourceDictionary resourceDictionary = new ResourceDictionary();
     Application.LoadComponent(resourceDictionary, new Uri("/PhoneApp1;component/Resources/BtnStyle.xaml", UriKind.Relative));
     Application.Current.Resources.MergedDictionaries.Add(resourceDictionary);
     //以上几行代码表示将我们自定义的样式加载到应用程序的资源字典中。
     this.btnDemo.SetValue(Button.StyleProperty, Application.Current.Resources["BtnStyle"]);

Style样式的四种使用(包括用C#代码动态加载资源文件并设置样式)的更多相关文章

  1. WPF中Style文件的引用——使用xaml代码或者C#代码动态加载

    原文:WPF中Style文件的引用--使用xaml代码或者C#代码动态加载 WPF中控件拥有很多依赖属性(Dependency Property),我们可以通过编写自定义Style文件来控制控件的外观 ...

  2. 两种动态加载JavaScript文件的方法

    两种动态加载JavaScript文件的方法 第一种便是利用ajax方式,第二种是,动静创建一个script标签,配置其src属性,经过把script标签拔出到页面head来加载js,感乐趣的网友可以看 ...

  3. Java加载资源文件的两种方法

    处理配置文件对于Java程序员来说再常见不过了,不管是Servlet,Spring,抑或是Structs,都需要与配置文件打交道.Java将配置文件当作一种资源(resource)来处理,并且提供了两 ...

  4. 动态加载script文件的两种方法

    第一种就是利用ajax方式,把script文件代码从后台加载到前台,然后对加载到的内容通过eval()执行代码.第二种是,动态创建一个script标签,设置其src属性,通过把script标签插入到页 ...

  5. Java加载资源文件几种方法

    from: http://andyzhu.blog.51cto.com/4386758/775836/ import java.net.URL; import org.springframework. ...

  6. 第一百一十八节,JavaScript,动态加载脚本和样式

    JavaScript,动态加载脚本和样式 一动态脚本 当网站需求变大,脚本的需求也逐步变大.我们就不得不引入太多的JS脚本而降低了整站的性能,所以就出现了动态脚本的概念,在适时的时候加载相应的脚本. ...

  7. JavaScript的DOM_动态加载脚本和样式

    一.动态加载脚本 当网站需求变大,脚本的需求也逐步变大.我们就不得不引入太多的 JS 脚本而降低了整站的性能,所以就出现了动态脚本的概念,在适时的时候加载相应的脚本. 1.动态加载js文件 比如:我们 ...

  8. js 动态加载事件的几种方法总结

    本篇文章主要是对js 动态加载事件的几种方法进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助   有些时候需要动态加载javascript事件的一些方法往往我们需要在 JS 中动态添 ...

  9. Spring加载properties文件的两种方式

    在项目中如果有些参数经常需要修改,或者后期可能需要修改,那我们最好把这些参数放到properties文件中,源代码中读取properties里面的配置,这样后期只需要改动properties文件即可, ...

随机推荐

  1. linux常用命令:chkconfig 命令

    chkconfig命令用来安装,查看或修改 services随系统启动的启动选项的设置.是Red Hat公司遵循GPL规则所开发的程序,它可查询操作系统在每一个执行等级中会执行哪些系统服务,其中包括各 ...

  2. linux常用命令:ln 命令

    ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在 ...

  3. 基于webview的Hybrid app和React Native及html5

    基于webview的Hybrid app和React Native及html5 React Native 结合了 Web 应用和 Native 应用的优势,可以使用 JavaScript 来开发 iO ...

  4. 使用 jQuery 进行前端验证

    前段验证脚本的教程,其基础为jQuery的插件validate.    一.可以验证哪些信息 要求输入不能为空 要求输入格式必须为电子邮箱 要求输入格式必须为URL 要求输入格式必须为日期 要求输入格 ...

  5. 计算概论(A)/基础编程练习2(8题)/4:骑车与走路

    #include<stdio.h> int main() { // 待处理的数据数量n ; scanf("%d", &n); float meters[n]; ...

  6. ELK学习笔记之ELK分析nginx日志

    0x00 配置FIlebeat搜集syslog #安装 rpm -ivh filebeat-6.2.3-x86_64.rpm mv /etc/filebeat/filebeat.yml /etc/fi ...

  7. 【翻译】std::list::remove - C++ Reference

    公有成员函数 std::list::remove void remove(const value_type& val); 删除与给定值相等的元素 从容器中删除所有与 val 值相等的元素.li ...

  8. linux内核分析 第18章读书笔记

    十八章 调试 一.内核调试概述 1.需要面对的 一个确定的bug 一个藏匿bug的内核版本 相关的内核代码的知识和运气 2.艰难的调试工作 重现bug很困难:大部分bug通常都不是行为可靠而且定义明确 ...

  9. CodeForces 76A Gift - 最小生成树

    The kingdom of Olympia consists of N cities and M bidirectional roads. Each road connects exactly tw ...

  10. 【前端】javascript+jquery实现手风琴式的滚动banner或产品展示图

    实现效果 实现步骤 // 鼠标放入到li中该盒子变宽,其他盒子变窄,鼠标移开大盒子,恢复原样 // 实现步骤 // 1. 给li添加背景 // 2. 绑定onmouseover事件,鼠标放入到li中, ...