2016-10-04 50 views
2

只有在資源文件存在的情況下才有加載資源字典的方法嗎? 在下面的情況下,我只希望讓資源字典當文件「資源/ AdditionalStyles.xaml」存在僅當文件存在時才加載資源字典

<ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="Resources/Styles.xaml" /> 
       <ResourceDictionary Source="Resources/AdditionalStyles.xaml" /> 
      </ResourceDictionary.MergedDictionaries> 
+0

這是可能的如果它存在於代碼中,則動態加載'ResourceDictionary'。您可以修改本教程以檢查文件是否存在,然後加載它:https://weblogs.asp.net/psheriff/load-resource-dictionaries-at-runtime-in-wpf –

回答

1

您可以覆蓋OnStartup方法在App.xaml.cs,然後檢查該文件的存在,加載它,如果它存在:

protected override void OnStartup(StartupEventArgs e) 
{ 
    var fileName = Environment.CurrentDirectory() + @"\Resources\AdditionalStyles.xaml"; 

    // Check if the AdditionalStyles.xaml file exists 
    if (File.Exists(fileName) 
    { 
     try 
     { 
      // try and load the file as a dictionary and add it the dictionaries 
      var additionalStylesDict = (ResourceDictionary)XamlReader.Load(fs); 
      Resources.MergedDictionaries.Add(additionalStylesDict); 
     } 
     catch (Exception ex) 
     { 
      // something went wrong loading the resource file 
     } 
    } 

    // any other stuff on startup 

    // call the base method 
    base.OnStartup(e); 
} 
+0

感謝您的回覆! – user1034912

1

您可以通過動態加載它通過代碼,而不是在App.xaml中插入類似的參考嘗試有人試圖做:Dynamically loading resource dictionary files to a wpf application gives an error

如果我沒有弄錯,它應該會給出一個異常,如果所述資源不存在,你可以捕獲該錯誤,或​​者檢查文件是否存在於路徑XYZ中,並執行其他邏輯你想繼續:

var foo = new Uri("pack://siteoforigin:,,,/resources/leaf_styles.xaml", UriKind.RelativeOrAbsolute); 
Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = foo }); 
+0

感謝您的回覆! – user1034912

1

加載動態:

private void LoadDynamicResource(String sStyle) 
    { 
     FileInfo fi1 = new FileInfo(sStyle); 
     if(fi1.Exists) 
     { 
      using (FileStream fs = new FileStream(sStyle, FileMode.Open)) 
      { 
       ResourceDictionary dic = (ResourceDictionary)XamlReader.Load(fs); 
       Resources.MergedDictionaries.Clear(); 
       Resources.MergedDictionaries.Add(dic); 
      } 
     } 
    } 
+0

感謝您的回覆! – user1034912