• 【转载WPF资源】


    什么叫WPF的资源(Resource)? 资源是保存在可执行文件中的一种不可执行数据。在WPF的资源中,几乎可以包含图像、字符串等所有的任意CLR对象,只要对象有一个默认的构造函数和独立的属性。也就是说,应用程序中非程序代码的内容,比如点阵图、颜色、字型、动画/影片档以及字符串常量值,可将它们从程序中独立出来,单独包装成"资源(Resource)"。
    使用资源的优势: 1. 由于不用写在程序代码中,方便管理:便于更新。 2. 优化资源,节省空间。资源一旦定义,便可重复利用。还记得FLASH中的将物体转换为元件吗?一旦将物体转换为元件,就可以重复利用了。在WPF中,似乎与之有共通之处。所不同的是,WPF将资源保存在XAML中,对我们而言是“可见的”。  

    一个简单的资源使用示例:

    复制代码
    <Page Name="root"   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">   <Page.Resources>     <SolidColorBrush x:Key="MyBrush" Color="Gold"/>     <Style TargetType="Border" x:Key="PageBackground">       <Setter Property="Background" Value="Blue"/>     </Style>     <Style TargetType="TextBlock" x:Key="Label">       <Setter Property="DockPanel.Dock" Value="Right"/>       <Setter Property="FontSize" Value="8"/>       <Setter Property="Foreground" Value="{StaticResource MyBrush}"/>       <Setter Property="FontFamily" Value="Arial"/>       <Setter Property="FontWeight" Value="Bold"/>       <Setter Property="Margin" Value="0,3,10,0"/>     </Style>   </Page.Resources>   <StackPanel>     <Border Style="{StaticResource PageBackground}">       <DockPanel>         <TextBlock Style="{StaticResource Label}">Label</TextBlock>         <Button DockPanel.Dock="Top" HorizontalAlignment="Left" Height="30" Background="{StaticResource MyBrush}" Margin="40">Button</Button>         <Ellipse DockPanel.Dock="Top" HorizontalAlignment="Left" Width="100" Height="100" Fill="{StaticResource MyBrush}" Margin="40" />       </DockPanel>     </Border>   </StackPanel> </Page>
    复制代码

    上例中,我们使用了静态资源(Static Resource),如有需要,我们也可以使用动态资源(Dynamic Resources)。这两者的区别是:静态资源在第一次编译后即确定其对象或值,之后不能对其进行修改。动态资源则是在运行时决定,当运行过程中真正需要时,才到资源目标中查找其值。因此,我们可以动态地修改它。由于动态资源的运行时才能确定其值,因此效率比静态资源要低。需要说明的是,资源不仅可以在XAML代码中访问,也可以使用C#代码访问和控制它们。方法是使用FindResource查找资源,Resource.Add增加资源和Resource.Remove(移除资源)。

     

    资源的范围(层级): WPF提供一个封装和存取资源(resource)的机制,我们可将资源建立在应用程序的不同范围上。WPF中,资源定义的位置决定了该资源的可用范围。资源可以定义在如下范围中: (1)物件级:此时,资源只能套用在这个Object物件,或套用至该物件的子物件。 (2)文件级:如果将资源定义在Window或Page层级的XAML档中,那么可以套用到这个文件中的所有物件。 (3)应用程序级:如果我们将资源定义在App.xaml 中,那么,就可以将资源套用到应用程序内的任何地方。 (4)字典级:当我们把资源封装成一个资源字典, 定义到一个ResourceDictionary的XAML文件时,就可以在另一个应用程序中重复使用。

    资源层级

    定义范围

    使用范围

    物件级

     

    只能套用在这个Object物件或其子物件中

    文件级

    Window或Page层级的XAML档中

    可套用到这个文件中的所有物件,如< Window.Resources

     >

    应用程序级

    App.xaml文档中

    套用到应用程序内的任何地方。

    字典级

    把资源封装成一个资源字典, 定义到ResourceDictionary的XAML文件中

    可以在另一个应用程序中重复使用。

     

    资源的查询方式 Static Resource的查询(1)查找使用该资源的元素的Resource字典; (2)顺着逻辑树向上查找父元素的资源字典,直到根节点; (3)查找Application资源; (4)不支持向前引用,即:不能引用在引用点之后才定义的资源。
    Dynamic Resource的查询(1)查找使用该资源的元素的Resource字典; 如果元素定义了一个Style 属性,将查找Style中的资源字典;如果元素定义了一个Template属性,将查找FrameworkTemplate中的资源字典。 (2)顺逻辑树向上查找父元素的资源字典,直到根节点; (3)查找Application资源; (4)查找当前激活状态下的Theme资源字典;

    (5)查找系统资源。

  • 相关阅读:
    .Net Standard(.Net Core)实现获取配置信息
    C# 自定义异常
    C# 表达式树Lambda扩展(四)
    C# 表达式树分页扩展(三)
    C# 表达式树遍历(二)
    C# 表达式树讲解(一)
    C#委托(delegate、Action、Func、predicate)和事件
    搭建Nuget服务器(Nuget私服)
    ORM之Dapper运用
    CentOS7 安装 redise redis-6.0.1
  • 原文地址:https://www.cnblogs.com/experience/p/4488806.html
Copyright © 2020-2023  润新知