- A+
1.一般程序的资源可以分为四个等级:
- 数据库中的数据相当于放在仓库里
- 资源文件里的数据相当于放在旅行箱里
- WPF对象资源里的数据相当于携带在背包里
- 变量中的数据相当于拿在手里
2.资源的查找顺序是沿着逻辑树向上一级控件查找,如果连顶级容器都没有就会去程序级Application.Resources中查找;如果还是没有找到则会抛出异常。
3.静态资源(StaticResource)和动态资源(DynamicResource)
- 静态资源是在程序载入内存时对资源的一次性使用,之后就不会再去访问这个资源了。
- 动态资源是程序运行过程中仍然会区访问资源。
<Window.Resources> <TextBlock x:Key="str1" Text="海内存知己" /> <TextBlock x:Key="str2" Text="海内存知己" /> </Window.Resources> <Grid> <StackPanel> <Button x:Name="btn1" Content="{StaticResource str1}" Height="60"/> <Button x:Name="btn2" Content="{DynamicResource str2}" Height="60"/> <Button x:Name="update" Margin="10" Width="120" Content="更新资源" Click="update_Click"/> </StackPanel> </Grid>
/// <summary> /// 更新资源 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void update_Click(object sender, RoutedEventArgs e) { this.Resources["str1"] = new TextBlock() { Text = "天涯若比邻" }; this.Resources["str2"] = new TextBlock() { Text = "天涯若比邻" }; }
4.程序中添加二进制资源(程序级资源),这个在Net FrameWork体系下大家很熟悉了,就不做说明了
5.WPF中的Pack Uri,这里重点说明下《引用程序集的资源文件》
编译到引用的程序集中的资源文件的 pack URI 使用以下授权和路径:
-
授权:application:///。
-
路径:编译到所引用程序集内的资源文件的名称。 路径必须符合以下格式:
AssemblyShortName{;版本] {;PublicKey]; 组件/路径
-
程序集短名称:所引用的程序集的短名称。
-
;版本 [可选]:所引用的包含资源文件的程序集的版本。 此部分在加载两个或多个具有相同短名称的引用程序集时使用。
-
;公钥 [可选]:用于对引用程序集进行签名的公钥。 此部分在加载两个或多个具有相同短名称的引用程序集时使用。
-
;组件:指定所引用的程序集是从本地程序集引用的。
-
/路径:资源文件的名称,包括其相对于所引用程序集的项目文件夹根目录的路径。
-
下面的示例演示一个资源文件的 pack URI XAML ,该资源文件位于所引用程序集的项目文件夹的根目录中。
pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml
下面的示例演示一个资源文件的 pack URI XAML ,该资源文件位于所引用程序集的项目文件夹的子文件夹中。
pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml
下面的示例演示一个资源文件的 pack URI,该 XAML 资源文件位于所引用的特定于版本的程序集的项目文件夹的根文件夹中。
pack://application:,,,/ReferencedAssembly;v1.0.0.1;component/ResourceFile.xaml
请注意,所引用的程序集资源文件的 pack URI 语法只能与 application:///机构一起使用。 例如,WPF 不支持以下。
pack://siteoforigin:,,,/SomeAssembly;component/ResourceFile.xaml
5.2 标记中的绝对 Pack URI
5.3 标记中的相对 Pack URI
5.4 更多详细说明请阅读官方文档:https://docs.microsoft.com/zh-cn/dotnet/desktop/wpf/app-development/pack-uris-in-wpf?view=netframeworkdesktop-4.8#pack-uri-resolution