zoukankan      html  css  js  c++  java
  • Silverlight实用窍门系列:68.Silverlight的资源字典ResourceDictionary

      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 下载,谢谢~

  • 相关阅读:
    [CF1295E] Permutation Separation
    [APIO2010] 特别行动队
    [CF1296F] Berland Beauty
    [CEOI2004] 锯木厂选址
    [CF1334E] Divisor Paths
    Review 2020.11.14
    [CQOI2016] 手机号码
    [LEETCODE600] 不含连续1的非负整数
    [CF55D] Beautiful numbers
    内存取证工具volatility
  • 原文地址:https://www.cnblogs.com/chengxingliang/p/2532032.html
Copyright © 2011-2022 走看看