2016-10-04 1 views
2

리소스 파일이있는 경우에만 리소스 사전을로드 할 수 있습니까? 아래의 경우 , 나는 파일 '자원/AdditionalStyles.xaml는'당신은 동적으로 코드를 통해로드 대신 같은 App.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

당신은 그것을로드, 파일의 존재를 확인 후 App.xaml.csOnStartup 메소드를 오버라이드 (override) 할 수는 :

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

존재하는 경우에만 리소스 사전을 허용 할 누군가가 다음을 시도했습니다 : 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
+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

관련 문제