2009-11-17 3 views
2

C#을 사용하여 리소스 사전의 내용에 어떻게 액세스합니까? "입력하는 대신액세스 시스템 : C#의 문자열 리소스 사전 XAML

private void OnAddGroup(object sender, ExecutedRoutedEventArgs e) 
    { 

     BooksGroupInfo group = new BooksGroupInfo(); 
     group.GroupName = "New Group" + TheTabControl.Items.Count; 
     TabItem tab = AddGroup(group); 
     _currentLibrary.addGroup(group); 
     _currentLibrary.CurrentGroup = group; 

    } 

: 예를 들어

여기 XAML 내 코드입니다 :

<system:String x:Key="NewGroup">New Group Name</system:String> 

그리고 C#으로 여기에 액세스하려면 새 그룹 "C#에서, 나는 그것을 대체하고 XAML의 리소스 사전에 액세스 할 수 있습니다. 따라서 명령은 자원 사전에있는 이름을 자동으로 가져옵니다.

내가 좋아하는 솔루션의 몇 가지 시도했다 : 등등

(System.String)this.FindResource("NewGroup"); 
Application.Current.Resources[typeof(System.String)]; 

와 ... 을하지만 그들은 작동하지 않습니다.

locbaml을 사용하여 지역화를 수행하고 있으며 C#의 텍스트/이름을 구문 분석하지 못합니다 (또는 방법을 모르겠습니다). 이것이 가능한 유일한 해결책이었습니다.

답변

4

일반적으로 FrameworkElement.FindResource을 사용하면 string s = this.FindResource("NewGroup") as string;이 작동합니다. "NewGroup"키가있는 리소스가 컨트롤 또는 창 (예 : this)의 범위에 존재하지 않을 가능성이 큽니다. 리소스가 있는지 확인해야합니다. 예 : 리소스가 다른 파일에서 나온 경우 MergedDictionaries을 사용해야합니다. 리소스가 실제로 액세스 할 수 있는지 테스트하려면 코드 숨김에 속한 XAML에서 OnAddGroup이 definde인지 확인하십시오.

나는 그것이 의미가 있기를 바랍니다.

+0

안녕하세요. 답장을 보내 주셔서 감사합니다.하지만 여전히 작동하지 않습니다. 죄송합니다 좀 ..이 새로운 .. –

+0

나는이 코드에 추가하고 4 번째 줄을 수락하지 않습니다 .. 만약 내가 제대로했는지, 그냥 리소스 사전의 소스를 추가했습니다. –

+0

ResourceDictionary resourceDictionary = ResourceDictionary로 보낸 사람 ; resourceDictionary.Source = new Uri ("Source.xaml", UriKind.Relative); BooksGroupInfo group = 새 BooksGroupInfo(); group.GroupName = (string resourceDictionary = this.FindResource ("NewGroup")을 문자열로 사용) + TheTabControl.Items.Count; TabItem 탭 = AddGroup (그룹); _currentLibrary.addGroup (group); _currentLibrary.CurrentGroup = group; –