2016-10-04 3 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

Смежные вопросы