2009-11-17 88 views
2

如何使用C#访问资源字典中的内容?访问系统:字符串资源字典C#中的XAML

例如,这里是我的XAML代码:

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

而且我想在这里访问它在C#:

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; 

    } 

无需键入“新组“,在C#中,我想替换它并有权访问XAML中的资源字典。因此,该命令将自动获取资源字典中的名称。

我已经试过像情侣的解决方案:

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

等等... ,但他们似乎并不管用。

我正在使用locbaml进行本地化,它不会解析C#上的文本/名称(或者我不知道该怎么做),那是我认为可能的唯一解决方案。

回答

4

通常使用​​这样的:string s = this.FindResource("NewGroup") as string;的作品。使用“NewGroup”关键字的资源更可能不存在于您的控件或窗口的范围内(无论this是什么)。你必须确保资源在那里。例如。如果您的资源来自其他文件,则必须使用MergedDictionaries。您可以测试资源实际上是否可访问,尝试从属于您的代码隐藏的XAML中获取资源,其中OnAddGroup是definde。

我希望这是有道理的。

+0

你好..谢谢你的回复,但我仍然无法得到它的工作。对不起有点新在这.. –

+0

我在代码中添加了这个,它不接受第4行..我不知道如果我做得正确,只是添加了资源字典的来源.. –

+0

ResourceDictionary resourceDictionary = sender as ResourceDictionary ; resourceDictionary.Source = new Uri(“Source.xaml”,UriKind.Relative); BooksGroupInfo group = new BooksGroupInfo(); group.GroupName =(string resourceDictionary = this.FindResource(“NewGroup”)as string)+ TheTabControl.Items.Count; TabItem tab = AddGroup(group); _currentLibrary.addGroup(group); _currentLibrary.CurrentGroup = group; –