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

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)进行访问,但是必须是在构造函数完成之后,例如我们可以这样访问刚刚定义的样式:

 

ExpandedBlockStart.gifView 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/421145.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

xdoj判断堆栈出栈序列是否有效c++

我在leetcode上写过类似的题&#xff0c;这个代码在xdoj上只能得***50***分&#xff0c;跪求各位大佬挑挑毛病。 #include<stack> #include<iostream> #include<vector> using namespace std; int main(){vector<int>poped;stack<int>s;int n,t;…

1064. 朋友数(20)

1064. 朋友数(20) 时间限制400 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者CHEN, Yue如果两个整数各位数字的和是一样的&#xff0c;则被称为是“朋友数”&#xff0c;而那个公共的和就是它们的“朋友证号”。例如123和51就是朋友数&#xff0c;因为123 51 6&…

Java StringBuffer

最近在学Java API 做的简单笔记 package C12_17;public class testBuffer {public static void main(String[] args) {//StringBuffer 属于java.lang包&#xff0c;属于基础包&#xff0c;jdk api 里面有其运用方式。StringBuffer sb new StringBuffer("Hello");//…

XDOJ 363 输出快速排序递归算法隐含递归树的后序遍历序列 AC

像我这样的菜鸡也没有什么能输出的&#xff0c;好像我写题解也不算输出。 最近期末了&#xff0c;写数据结构实验的时候&#xff0c;这个题写了挺久的&#xff0c;搞出来记录一下。 输出快速排序递归算法隐含递归树的后序遍历序列 描述&#xff1a; 快速排序递归算法隐含一棵由…

uilabel 自适应

有时一个UILable的text内容是变化的&#xff0c;而且差异有很大&#xff0c; 需求上要求UILabel的大小高宽能够自适应text的内容。代码例子&#xff1a; myLable[[UILabel alloc] initWithFrame:CGRectMake(0, 23, 175, 33)]; [myLable setFont:[UIFont fontWithName:&qu…

1065. 单身狗(25)

1065. 单身狗(25) 时间限制300 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者CHEN, Yue“单身狗”是中文对于单身人士的一种爱称。本题请你从上万人的大型派对中找出落单的客人&#xff0c;以便给予特殊关爱。 输入格式&#xff1a; 输入第一行给出一个正整数N&am…

ArrayList的remove方法(重写equals方法) 与LinkedList的常用操作

package C12_18;import java.util.ArrayList;public class joy {public static void main(String[] args) {show();//重写equals方法&#xff0c;移除集合里面的元素。public static void show() {ArrayList<dog> al new ArrayList<dog>();al.add(new dog("j…

期末寒假绝对好好学

期末考试考7门&#xff0c;距离最近的一门还有7天&#xff0c;我保证我这几天绝对好好复习&#xff0c;好好过一个寒假。我的寒假从来都是浪完的&#xff0c;我发誓我这一次绝对好好学习٩( •̀㉨•́ )و &#xff0c;我不好好学&#xff0c;我这辈子都单身

android学习日记13--数据存储之ContentProvide

3、ContentProvider  数据在Android当中是私有的&#xff0c;当然这些数据包括文件数据和数据库数据以及一些其他类型的数据。ContentProvider实现多应用程序间的数据共享类一般利用ContentProvider为需要共享的数据定义一个URI(统一资源定位符)然后其他程序通过Context获得C…

cin,cin.get(),getline()

我势必扫清我对c的各种疑惑&#xff0c;重拾csdn水文之任 结论&#xff1a;cin在获得需要接受的东西之前&#xff0c;对缓冲区里的空格和换行符不会理睬(但是会把它们从缓冲区删去)&#xff0c;但如果达到了可以结束接受的时候&#xff0c;空格和换行符都会让cin不再接 收,并且…

1067. 试密码(20)

1067. 试密码(20) 时间限制400 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者CHEN, Yue当你试图登录某个系统却忘了密码时&#xff0c;系统一般只会允许你尝试有限多次&#xff0c;当超出允许次数时&#xff0c;账号就会被锁死。本题就请你实现这个小功能。 输入格…

Map接口的实现类HashMap的操作

3中遍历HashMap方式 package C12_21;import java.util.Collection; import java.util.HashMap; import java.util.Set; import java.util.Map.Entry;public class testHashMap {public static void main(String[] args) {//定义两个HashMap 集合HashMap<Integer, Integer&g…

1068. 万绿丛中一点红(20)

1068. 万绿丛中一点红(20) 时间限制500 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者CHEN, Yue对于计算机而言&#xff0c;颜色不过是像素点对应的一个24位的数值。现给定一幅分辨率为MxN的画&#xff0c;要求你找出万绿丛中的一点红&#xff0c;即有独一无二颜色…

MapReduce 作业调试

1. 最经典的方法通过打印语句来调试程序 System.err.println("Bad Data"value.toString()); 这些输出错误都会记录到一个标准错误中&#xff0c;可以通过WebUI进行查看 2.可以创建一个自定义计数器来统计整个数据集中不合理的数据的数量。 首先创建一个enum enum BA…

寻找边界值,二分模板,简洁凝练

二分模板 class Solution {public static void main(String[] args) {int[] arr{1,2,2,2,2,4,5,6};int l0,rarr.length-1;while(l<r){int midl(r-l)/2;if(arr[mid]>2) rmid;else lmid1;}System.out.println("l:"l"r:"r);System.out.println("le…

Java 字节和字符流的读写+Buffered

一个关于IO流的导图 IO流字节的读写&#xff0c;实现复制 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException;public class TestCopy {public static void main(String[] args) throws IOException {copyT…

1069. 微博转发抽奖(20)

1069. 微博转发抽奖(20) 时间限制400 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者CHEN, Yue小明PAT考了满分&#xff0c;高兴之余决定发起微博转发抽奖活动&#xff0c;从转发的网友中按顺序每隔N个人就发出一个红包。请你编写程序帮助他确定中奖名单。 输入格式…

jdbc 连接 Oracle 进行基本的增删改查

package api8;import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement;public class UpdateSelect {public static void main(String[] args) {// jdbc 连接 OracleselectAll();}//…

1070. 结绳(25)

1070. 结绳(25) 时间限制200 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者CHEN, Yue给定一段一段的绳子&#xff0c;你需要把它们串成一条绳。每次串连的时候&#xff0c;是把两段绳子对折&#xff0c;再如下图所示套接在一起。这样得到的绳子又被当成是另一段绳…

近期的随笔

有一段时间没有更新博客了&#xff0c;这一段时间确实忙&#xff0c;换工作&#xff0c;过年&#xff0c;适应新工作&#xff0c;培训&#xff0c;搬家等等。今天积累了一点想法想写写。 1.关于博客 在运营了独立博客一段时间后&#xff0c;有了比较深的感受就是为了高大上而高…