精华内容
下载资源
问答
  • 使用WPF动态资源在C#中进行Gtk3本地化
  • WPF动态调用资源文件

    热门讨论 2013-12-14 15:54:32
    WPF 列表选择,动态调用ResourceDictionary内资源
  • 刚开始接触并学习wpf资源的使用不太明白 ![图片说明](https://img-ask.csdn.net/upload/201504/28/1430229724_571214.png) 代码如下(没有定义应用程序级的资源) 第二个按钮为什么不采用自己的资源而采用了...
  • WPF 资源动态加载

    2020-12-11 15:21:06
    LoadStyleResource(@"Resources/style/...窗体动态加载样式 private void Window_Initialized(object sender, EventArgs e) { this.AllowsTransparency = true; this.Style = (Style)this.FindResourc...

     

    
                LoadStyleResource(@"Resources/style/ResourceDictionary.xaml");

    窗体动态加载样式

      private void Window_Initialized(object sender, EventArgs e)
            {
                this.AllowsTransparency = true;
                this.Style = (Style)this.FindResource("window_Shadow");
            }
    

     

    展开全文
  • WPF Resource资源

    千次阅读 2015-04-10 06:25:52
    WPF不但支持程序级的传统资源,同时还推出了独具特色的对象级资源,每个界面元素都可以携带自己的资源并可被自己的子级元素共享。比如后面的章节我们会讲到模板、程序样式和主题就经常放在对象资源里面。这样一来,...

        WPF不但支持程序级的传统资源,同时还推出了独具特色的对象级资源,每个界面元素都可以携带自己的资源并可被自己的子级元素共享。比如后面的章节我们会讲到模板、程序样式和主题就经常放在对象资源里面。这样一来,在WPF程序中数据就分为4个等级存储了:数据库里的数据相当于存放在仓库里面,资源文件里的数据就相当于放进了旅行箱里,WPF对象资源里面的数据相当于存放在携带的背包里,变量里面的数据相当于拿在手里。

    1. WPF对象资源的定义和查找

        每个WPF界面元素都有一个名为Resource的属性,这个属性继承至FrameworkElement类,其类型为ResourceDictionary。ResourceDictionary能够以键值对的形式存储资源,当要使用到某个资源的时候,使用键值对的形式获取资源对象。在保存资源时,ResourceDictionary视资源对象为Object类型,所以再使用资源时先要对资源对象进行类型转换,XAML编译器能够根据Attribute自动识别资源类型,如果类型不对就会抛出异常,但在C#中检索到资源对象之后,类型转换的事情就只能由我们自己来做了。ResourceDictionary可以存储任意类型的对象。在XAML代码中向Resource添加资源时需要把正确的命名空间引入到XAML代码中,让我们来看一个例子:

    <Window x:Class="WpfApplication10.wnd101"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:sys="clr-namespace:System;assembly=mscorlib"
            Title="MainWindow" Height="120" Width="525">
        <Window.Resources>
            <ResourceDictionary>
                <sys:String x:Key="_str">字符串</sys:String>
                <sys:Double x:Key="_db">89.7898</sys:Double>
            </ResourceDictionary>
        </Window.Resources>
        <StackPanel>
            <!--C#中可以使用FindResource查找对象资源-->
            <TextBlock x:Name="_txtBlock" FontSize="16" Text="{StaticResource ResourceKey=_str}" Height="28"/>
        </StackPanel>    
    </Window>
    


        首先我们将System命名空间引入XAML代码中并映射为sys名称空间,然后在Windows.Resource里面添加了两个资源条目,一个是string类型,一个是double类型。最后我们用textBlock来消费这个资源。程序运行效果如下图:

        查找资源时,先查找控件自己的Resource属性,如果没有这个资源程序会沿着逻辑树向上一级进行查找,如果连最顶端容器都没有这个资源,程序就会查找Application.Resource(也就是程序的顶级资源)。如果还没有找到,那么就只能抛出异常了。
    这就好比每个界面元素都有自己的一个背包,里面可能装有各种各样的资源,使用的时候打开找一找,如果没有找到还可以去翻看上一层控件的背包,直至找到这个资源或报告没有这个资源为止。

        你可能会想,如果把资源像CSS或者JS一样放在独立的文件夹里,使用时成套引用、重用时便于分发岂不更好?WPF的资源当然可以做到这一点;ResourceDictionary具有一个名为Source的属性,只要把包含资源定义的文件路径赋值给这个属性就一切搞定了!例如把皮肤以资源的形式放在XAML文件中,使用时仅需要将相应的XAML文件添加进项目并使用Source属性进行引用,你的程序就立刻变的光鲜照人。

        <Window.Resources>
            <!--用于一键换肤-->
            <ResourceDictionary Source="ShinyRed.xaml"></ResourceDictionary>
        </Window.Resources>

    2. 且“动”且“静”用资源

        当资源被存储进资源词典之后,我们可以使用两种方式来使用这些资源-----静态方式和动态方式。静态资源使用StackResource指的是程序载入内存时对资源的一次性使用,之后就不在去访问这个资源了;动态资源(DynamicResource)使用指的是在程序运行过程中仍然会去访问资源。显然如果你确定某些资源在程序初始化的时候只使用一次、之后不会再改变,就应该使用StaticResource,而程序运行过程中还有可能改变资源应该以DynamicResource形式使用。拿程序的主题来举例,如果程序的皮肤在运行过程中始终不变,以Static形式来使用资源就可以了。如果在程序运行过程中允许用户更改皮肤或者配色方案则必须使用DynamicResource来使用资源。


        请看下面这个例子,我在Windows资源字典里放置了两个TextBlock类型资源,并分别以StaticResource和DynamicResource方式使用之:

    <Window x:Class="WpfApplication10.wnd102"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="wnd102" Height="120" Width="300">
        <Window.Resources>
            <ResourceDictionary>
                <TextBlock x:Key="_txt1" Text="海上生明月"></TextBlock>
                <TextBlock x:Key="_txt2" Text="海上生明月"></TextBlock>
            </ResourceDictionary>
        </Window.Resources>
        <StackPanel>
            <Button x:Name="_btn1" Content="{StaticResource _txt1}" Height="28" ></Button>
            <!--动态资源运行时,才能更新-->
            <Button x:Name="_btn2" Content="{DynamicResource _txt2}" Height="28" ></Button>
            <Button x:Name="_btn3" Content="Update" Height="28" Click="_btn3_Click" ></Button>
        </StackPanel>
    </Window>
    


        按钮负责在程序运行过程中对资源词典里面的两个资源进行改变:

    private void _btn3_Click(object sender, RoutedEventArgs e)
    {
        this.Resources["_txt1"] = new TextBlock { Text = "更新成功" };
        this.Resources["_txt2"] = new TextBlock { Text = "更新成功" };
    }
    

    3. 向程序集中添加二进制资源

        常见的应用程序资源有图标、图片、文本、音频、视频等,各种编程语言的编译器或者资源编译器都有能力把这些文件编译进目标文件(最终的.exe文件或者.dll文件)。资源文件在目标文件里以二进制数据形式存在、形成目标文件的资源段(Resource Section),使用时数据会被提取出来。

        为了不把资源词典里的资源和应用程序里面内嵌的资源搞混,我们明确称呼资源词典里面的资源为“WPF资源”或“对象资源”,称呼应用程序内嵌资源为“程序集资源”或者“二进制资源”。特别提醒一点,WPF中写在<Application.Resource>...</Application.Resource>标签内的资源仍然是WPF资源而非二进制资源。
    下面让我们看看如何向WPF程序中添加二进制资源并使用它们。

        

        Resources.resx文件内容的组织形式也是“键-值”对,编译后,Resources.resx会形成Properties名称空间中的Resource类,使用这个类的方法或属性就能获取资源。为了让XAML编译器能够访问这个类,一定要把Resources.resx的访问级别由Internal改为public。利用资源文件编辑器,可以资源文件的字符串里添加两个条目,然后分别在XAML代码和C#代码中访问他们。
    在XAML代码中使用Resources.resx中的资源,需要把程序的Properties名称映射为XAML名称空间,然后使用x:Static标签扩展来访问资源。

    <Window x:Class="WpfApplication10.wnd103"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:prop="clr-namespace:WpfApplication10.Properties" 
            FontSize="16"
            Title="wnd103" Height="130" Width="340">
        <StackPanel>
            <!--C#中可以使用Properties.Resources.访问-->
            <TextBlock x:Name="_txtBlock1" Text="{x:Static prop:Resources.password}"></TextBlock>
            <TextBlock x:Name="_txtBlock2" Text="{x:Static prop:Resources.userName}"></TextBlock>
        </StackPanel>
    </Window>
    


        有一点特别提醒大家,如果想让外部文件编译进二进制资源,必须在属性窗口把文件的Build Action属性值设为Resource。并不是每种文件都会自动设置为Resource,比如图片文件会,MP3文件就不会,一般情况下,如果Build Action的值设为Resource,则Copy to Output Directory属性设置为Do Not Copy;如果不希望以资源的形式使用外部文件,可以把Build Action属性设置为None,而把Copy to Output Directory设置为Copy Always。另外,Build Action属性的下拉列表里面有一个颇具迷惑性的值Embeded Resource,不要选择这个值。

    4. 使用PACK URI路径访问二进制资源

        WPF对二进制资源的访问有自己的一套方法,称为PACK URI路径。有时候死记硬背能够让读者快速学习又能帮助作者偷点懒。比如,WPF的PACK URI路径,你只需要记住这个格式就可以了:

    pack://application,,,[/程序集名称;][可选版本号;][文件夹名称/][文件名称]  


    而实际上pack://applicationi,,,可以省略、程序集名称和版本号常使用省略值,所以剩下的就只有这个了:

    [文件夹名称/][文件名称]  

    我们看看例子:


     

    <Window x:Class="WpfApplication10.wnd104"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="wnd104" Height="200" Width="300">
        <Grid>
            <Image x:Name="_image" Source="Resources/Images/Aodi.jpg" Stretch="Fill"></Image>
        </Grid>
    </Window>

    也可使用C#访问:

    _image.Source = new BitmapImage(new Uri(@"Resources/Images/Aodi.jpg", UriKind.Relative));

    参考:《深入浅出WPF》

    展开全文
  • WPF资源资源字典

    千次阅读 2019-04-17 21:15:07
    WPF资源分为静态资源和动态资源。静态资源是在程序载入前就对资源进行引用,类似样式资源,而动态资源是程序在运行工程中才去访问的资源,故事版资源;资源字典是个定级元素,在它里面直接封装资源供整个项目使用,...

    WPF—资源与资源字典

    开发工具与关键技术:VS2015, XAML,C#
    作者:张金鱼
    撰写时间:2019 年 3月 28 日

    WPF资源分为静态资源和动态资源。静态资源是在程序载入前就对资源进行引用,类似样式资源,而动态资源是程序在运行工程中才去访问的资源,故事版资源;资源字典是个定级元素,在它里面直接封装资源供整个项目使用,在这里我就对资源和资源字典做个简单的介绍。

    1、 资源;

    资源定义在根元素下,和HTML中的CSS类似,格式一般是

    <根元素. Resources>
       <资源定义 x:key=”资源标记名” />
    </根元素. Resources>
        //子元素调用
    <子元素 (对应)属性名=”{StaticResource 资源标记名}” />
    

    这样资源的样式就引用过来了,例子如下:

     <Grid>
              //定义资源
            <Grid.Resources>
             //线性渐变画刷定义背景色
                <LinearGradientBrush x:Key="bggrid" StartPoint="0,0" EndPoint="1,1">
                    <GradientStop Color="Yellow" Offset="0"></GradientStop>
                    <GradientStop Color="Green" Offset="0.25"></GradientStop>
                    <GradientStop Color="Blue" Offset="0.5"></GradientStop>
                    <GradientStop Color="Purple" Offset="1"></GradientStop>
                </LinearGradientBrush>
            </Grid.Resources>
            //按钮调用资源
            <Button Background="{StaticResource bggrid}" Width="100" Height="50" Content="资源" Foreground="White"></Button>
    </Grid>
    

    效果如下:
    在这里插入图片描述
    这是一个网格布局下的按钮,背景颜色引用了静态资源字典bggrid里面定义好的样式。因为我定义的线性渐变背景色,所以按钮背景色就是渐变色背景。

    2、 资源字典;

    资源字典是我们自己新建的一个xaml文件,在项目里添加新建项,然后选中资源字典,新建资源字典,如图:
    在这里插入图片描述
    资源字典的写法和资源一样,直接在文件里定义你的资源就可以了

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                        xmlns:local="clr-namespace:资源字典">
    <!-----定义textbox的样式,不写key,整个项目可以使用--->
        <Style TargetType="TextBox">
            <Setter Property="FontFamily" Value="楷体"></Setter>
            <Setter Property="FontSize" Value="50"></Setter>
            <Setter Property="Foreground" Value="Red"></Setter>
        </Style>
    </ResourceDictionary>
    

    新建好资源字典后还要去启动项(App.xaml)合并资源字典,这样才可以供整个项目使用

    <Application.Resources>
            <ResourceDictionary>
                <ResourceDictionary.MergedDictionaries>
    <!----sourceDictionary里面的Source链接需要合并的资源字典名称,
    //每个 sourceDictionary标签只能连接一个资源字典,
    //可以定义多个sourceDictionary 来连接多个资源字典-
                    <ResourceDictionary Source="Dictionary1.xaml"></ResourceDictionary>
                </ResourceDictionary.MergedDictionaries>
            </ResourceDictionary>
    </Application.Resources>
    

    窗体xaml代码如下图所示,这里没有写代码块,因为代码不多,所以图片展示xaml代码和效果图片
    在图中我并没有在当前窗体中定义textbox的前景色,而它却根据元素种类引用到了应用程序资源字典的样式了;

    在这里插入图片描述
    资源和资源字典不仅仅能定义元素的样式,还能定义资源的模板、故事版、触发器等等,方便了为较多同样控件定义样式时代码的冗余、重复定义同一样式,比如我们一个项目的文本框的样式需要同一而定,就直接可以在资源或者资源字典里定义它们的样式,或者定义一些控件的故事版等。

    展开全文
  • wpf中静态资源动态资源的区别 静态资源(StaticResource)指的是在程序载入内存时对资源的一次性使用,之后就不再访问这个资源了。 动态资源(DynamicResource)指的是在程序运行过程中然会去访问资源...

    wpf中静态资源和动态资源的区别

    静态资源(StaticResource)指的是在程序载入内存时对资源的一次性使用,之后就不再访问这个资源了。

    动态资源(DynamicResource)指的是在程序运行过程中然会去访问资源。

    posted @ 2018-03-03 14:38 雨落忧伤- 阅读( ...) 评论( ...) 编辑 收藏
    展开全文
  • WPF资源

    千次阅读 2013-10-19 19:59:21
    WPF资源有两种,一种称为“程序集资源”( assembly resources)或者“二进制资源”(binary resources),在MSDN中将其称为“应用程序数据文件”(application data files);另外一种称为资源或者对象资源...
  • WPF资源

    千次阅读 2014-08-17 18:28:09
    本文通过实例演示WPF资源的使用,并在演示过程中对WPF资源相关知识点进行解释说明。   二 实例操作 1新建WPF应用程序WpfResourcesExp,程序结构如下图所示。   图1 WpfResourcesExp程序结构图 其中: ...
  • WPF资源Resource

    2020-02-26 18:16:16
    文章目录WPF资源0.WPF支持的资源形式或者说分类1.资源层级有四个等级2.合并资源字典到Resource属性3.关于静态StaticResource和动态Resource4.关于资源字典ResrouceDictionary5.后台代码FindResource方法能查找到什么...
  • WPF静态资源

    2020-08-09 18:32:28
    最近在学wpf,所以给大家介绍一下如何在wpf中引用数据字典中定义的静态资源。 静态资源(staticResource)指的是在程序载入内存时对资源的一次性使用,之后就不再访问这个资源了。 首先创建好一个wpf应用程序,打开...
  • C# wpf 使用资源文件 resx

    千次阅读 2015-03-02 23:23:08
    C# wpf 使用资源文件 resx
  • WPF中的静态资源动态资源

    千次阅读 2012-03-14 16:09:56
    转自: ... 首先看一下静态资源动态资源的示例,代码如下: XAML代码如下:  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  xml
  • WPF资源整合

    2018-09-30 11:13:39
    压缩包里包括WPF的视频资源WPF的文档资料,满足入门学习,欢迎下载使用,
  • wpf 引用资源文件

    千次阅读 2014-05-04 11:29:01
    通常使用 WPF 资源作为重用通常定义的对象和值的简单方法。 在 WPF资源通常用作“样式”(Style)、样式模板、数据模板等。 二、资源的定义及 XAML 中引用 资源可以定义在以下几个位置: 1 应用程序级资源 ...
  • WPF动态换肤的实现方法 具体内容见这里https://mp.csdn.net/postedit/84549019
  • 原文:WPF 资源(StaticResource 静态资源、DynamicResource 动态资源、添加二进制资源、绑定资源树) 一、WPF对象级(Window对象)资源的定义与查找 实例一: StaticResource 静态资源(如:皮肤配置方案,...
  • #WPF# binding 动态资源

    2020-03-05 10:04:27
    3.在xaml文件引入资源 Tips:别忘记引入域Local所在命名空间 4.使用该资源 权限" SelectedValueBinding="{Binding ExecutableCode }" SelectedItemBinding="{Binding ExecutableCode ,Mode=Two...
  • WPF C# 资源宝典

    2013-01-09 15:01:08
    WPF C# VS2010资源宝典--C#环境下开发WPF的书籍
  • WPF 图片资源设定

    2017-07-07 14:17:31
    WPF资源路径的Resource和Content资源。
  • WPF 动态换肤示例

    热门讨论 2012-03-11 18:18:41
    该示例是从其他的动态库中加载资源文件,达到换肤目的的。 即皮肤文件可以是用户自定义的,也可能是开发人员事先定义的。 增加了应用程序的动态表现能力。
  • WPF GitHub资源

    2019-02-13 10:09:12
    WPF is a .NET Core UI framework for building Windows desktop applications. 林德熙 https://github.com/944095635/DMSkin-for-WPF 开源WPF界面
  • 首先来看一下效果,label1的背景是以静态方式绑定的图片,label2的背景是以动态方式绑定的同一张图片。点击按钮“更换背景”之后,label2的背景就变成蓝色了,如下图: MainWindow.xaml中代码如下: <Window x:...
  • WPF资源

    千次阅读 2012-01-11 19:28:05
    WPF中的数据分为四个等级存储:数据库、资源文件、WPF对象、变量 每个WPF的界面元素都有一个名为Resources的属性,这个属性继承自FrameworkElement类,起类型为ResourceDictionary,ResourceDictionary能够以...
  • wpf打印资源合集3

    2014-03-25 17:16:09
    wpf打印资源集合,一些代码汇总.做个备份.
  • wpf打印资源集合1

    2014-03-25 15:47:03
    wpf打印资源集合,一些代码汇总.做个备份.
  • wpf 资源使用

    2020-09-25 14:27:33
    wpf资源1. wpf对象级资源2. wpf 资源使用 动态方式与静态方式3. wpf 资源(二进制资源) 1. wpf对象级资源 <Window.Resources> <ResourceDictionary> <sys:String x:Key="str"> 沉舟侧畔千帆过...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,677
精华内容 9,470
关键字:

wpf动态资源