• WPF资源


    wpf资源

    wpf资源系统是一种保管一系列有用对象的简单方法 从而更方便的使用这些对象

    资源的优点 ,高效 :定义一个资源,可以在多处引用

    维护方便 :修改一处即可,例如用户更换皮肤,字体等动作

    wpf中每个元素都有Resource属性(FrameworkElement子类) ,该属性存储了一个资源字典,可以包含任意类型的对象,并根据字符串进行索引

    wpf索引资源,

      1、从当前元素中寻找;

      2、父类容器中寻找;

      3、window顶级元素中查找;

      4、应用程序集中查找;

      、资源中查找

    引用资源

      动态引用资源:当资源被改变的时候,引用该资源的对象会同步发生变化;

      通过xaml标记扩展语法 XX属性 = "{DynamicResource myBrush}"

      静态引用资源:程序启动时候加载该资源后,无论资源发生变化,程序不会发生变化

      通过xaml标记扩展语法 XX属性 = "{StaticResource myBrush}"

    资源单例:

      正常情况都是初始化一个资源对象,然后在多处引用这个对象,当希望某处引用可以单独更改时,可以设置资源的创建模式 x:Shared = “False” 标识这个资源对象 为每一个引用单独创建对象

      该模式不建议使用

      注:VS2017 不提示这属性,手动输入后能正常通过编译运行

            <ImageBrush x:Key="TitleBrush" x:Shared="False"  TileMode="Tile" Viewport="0 0 32 32"
                        ImageSource="happyFace.jpg" ViewportUnits="Absolute" />

    代码访问资源

    资源被定义后相当于当前类的一个属性,可以通过 FrameworkElement.FindResource(参数为资源的key) 来进行查找资源 ,如果资源不存在则抛出异常 ; 建议使用 TryFindResource()方法进行查找 ;资源不存在返回空引用

    MainWindow.xaml

    <Window x:Class="WpfAppResource.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:WpfAppResource"
            mc:Ignorable="d"
            Title="MainWindow" Height="350" Width="525" Name="mainWindow">
        <Window.Resources>
            <ImageBrush x:Key="TitleBrush" x:Shared="False"  TileMode="Tile" Viewport="0 0 32 32"
                        ImageSource="happyFace.jpg" ViewportUnits="Absolute" />
            <SolidColorBrush x:Key="windowBrush" Color="Blue"/>
            <SolidColorBrush x:Key="changeBrush" Color="Red"/>
        </Window.Resources>
        <Grid >
            <Button Background="{DynamicResource windowBrush}" Height="32"  Content="引用容器的资源" Margin="50,59,337,177" />
            <Button Name="btnChange"  Foreground="{x:Static SystemColors.WindowTextBrush}" Content="引用元素本身的资源" Height="32" Margin="50,138,337,150">
                <Button.Resources>
                    <SolidColorBrush x:Key="ElementBrush" Color="Green"/>
                </Button.Resources>
                <Button.Background >
                    <StaticResource  ResourceKey="ElementBrush"/>
                </Button.Background>
            </Button>
            <Button Background="{DynamicResource changeBrush}" Height="32"  Content="动态改变资源"  Click="btnChange_Click" Margin="50,192,337,96"/>
            <Button Background="{DynamicResource appBrush}" Height="32"  Content="引用程序集资源"  Click="btnChange_Click" Margin="50,246,337,42"/>
            
        </Grid>
    </Window>

     App.Xaml

    <Application x:Class="WpfAppResource.App"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:local="clr-namespace:WpfAppResource"
                 StartupUri="MainWindow.xaml">
        <Application.Resources>
            <SolidColorBrush x:Key="appBrush" Color="Orange"/>
        </Application.Resources>
    </Application>

    代码动态改变资源

    using System.Windows;
    using System.Windows.Media;
    
    namespace WpfAppResource
    {
        /// <summary>
        /// MainWindow.xaml 的交互逻辑
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
    
            private void btnChange_Click(object sender, RoutedEventArgs e)
            {
                mainWindow.Resources["changeBrush"] = new SolidColorBrush(Colors.LightBlue);
    
            }
        }
    }



     点击动态改变按钮之后

  • 相关阅读:
    给XML文件定义DTD
    详探TextRange对象用execCommand()执行命令
    获取屏幕,浏览器,网页高度宽度
    花点时间搞清top、postop、scrolltop、scrollHeight、offsetHeight
    DataView数据组件
    回调实现无刷新级联下拉框(.net)
    ASP.NET的简单数据绑定
    详探TextRange对象查找与选择
    方维系统常用的jquery库以及各个库的含义
    方维购物分享系统 给店铺品牌加喜欢收藏的功能
  • 原文地址:https://www.cnblogs.com/shenwenbo/p/8614639.html
Copyright © 2020-2023  润新知