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