• Silverlight实用窍门系列:68.Silverlight的资源字典ResourceDictionary


     
    允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://chengxingliang.blog.51cto.com/3972944/886643

      ResourceDictionary是一个键控对象字典,可在 XAML 和代码中使用。在其中我们可以定义样式、模板等以方便在其他页面中随时调用。

      首先我们新建一个ResourceDictionary页面如下图:

      然后向资源字典文件中写入以下代码,分别是样式和模板:

    <ResourceDictionary
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
        <!--数据模板-->
        <DataTemplate x:Key="lbTmp">
            <StackPanel Orientation="Vertical" >
                <StackPanel Orientation="Horizontal" Margin="5" Width="380">
                    <TextBlock Text="{Binding ArtName}" Style="{StaticResource tbStyle}" 
                               Margin="5 10 0 0"></TextBlock>
                    <TextBox Text="{Binding ArtContent}" Name="tbName" Margin="5"></TextBox>
                    <TextBox Text="{Binding ArtAuthor}" Margin="5"></TextBox>
                    <TextBlock Text="{Binding ArtUpdateTime}" Margin="5 10 0 0"></TextBlock>
                </StackPanel>
                <StackPanel Orientation="Horizontal"  Visibility="Collapsed">
                    <TextBox Text="{Binding ArtContent}" Width="280"></TextBox>
                </StackPanel>
            </StackPanel>
        </DataTemplate>
        <!--样式-->
        <Style x:Key="tbStyle" TargetType="TextBlock">
            <Setter Property="FontWeight" Value="Bold"></Setter>
            <Setter Property="Foreground" Value="Red"></Setter>
        </Style>
    </ResourceDictionary>

      此时我们将此资源字典拷贝一份,仅仅只是将文字样式中的字体颜色从蓝色变为红色。然后我们在App.xaml中加载这两个资源字典,首先加载蓝色字体的资源字典A,然后我们再加载红色字体的资源字典B,代码如下:

    <Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
                 x:Class="SLResDic.App"
                 >
        <Application.Resources>
            <ResourceDictionary>
                <ResourceDictionary.MergedDictionaries>
                    <ResourceDictionary Source="ResourceDic.xaml" />
                    <ResourceDictionary Source="ResourceDic2.xaml" />
                </ResourceDictionary.MergedDictionaries>
            </ResourceDictionary>
        </Application.Resources>
    </Application>

      加载此资源字典中的资源方法有以下两种:

      第一种Xaml直接加载,如下:

        <Grid x:Name="LayoutRoot" Background="White"  DataContext="{StaticResource SourceList}">
            <TextBlock Name="tblock" Style="{StaticResource tbStyle}" 
                       HorizontalAlignment="Left" Width="100" Text="今天第一"></TextBlock>
            <ListBox x:Name="lbRes" ItemsSource="{Binding ArticleList}" 
                     Margin="0 50 0 0 "
                    ItemTemplate="{StaticResource lbTmp}"
                     HorizontalAlignment="Left" VerticalAlignment="Top"
                      Height="400"  >
            </ListBox>
        </Grid>

      第二种后台加载

            public MainPage()
            {
                InitializeComponent();
                DataTemplate dtemp = Application.Current.Resources["lbTmp"] as DataTemplate;
                lbRes.ItemTemplate = dtemp;
            }

      效果如下:

      从上面的效果来看我们生效的风格样式是红色的第二个资源字典。那时因为<ResourceDictionary.MergedDictionaries>资源字典合并的原因,后面添加的资源字典会覆盖之前的同名key字典资源。

      如需源码请点击 SLResDic.zip 下载,谢谢~

    本文出自 “程兴亮-Silverlight” 博客,请务必保留此出处http://chengxingliang.blog.51cto.com/3972944/886643

  • 相关阅读:
    php数组根据某一个键值,把相同键值的合并生成一个新的二维数组
    首次备案图文引导
    阿里云域名备案之如何填写真实性核验单
    国际域名和境外域名能否提交备案
    sublime如何实现函数折叠
    怎样实现给DEDE的栏目增加栏目图片(2)
    深入浅出Hadoop实战开发(HDFS实战图片、MapReduce、HBase实战微博、Hive应用)
    HBase零基础高阶应用实战(CDH5、二级索引、实践、DBA)
    大数据就是这么任性第一季数据结构和算法(一线经验、权威资料、知识新鲜、实践性强、全程源码)
    Cloudera Hadoop 5& Hadoop高阶管理及调优课程(CDH5,Hadoop2.0,HA,安全,管理,调优)
  • 原文地址:https://www.cnblogs.com/wzs2016/p/6296782.html
Copyright © 2020-2023  润新知