访问系统:C#中的字符串资源字典XAML

sigwle7e  于 2023-05-04  发布在  C#
关注(0)|答案(2)|浏览(249)

如何使用C#访问资源字典中的内容?
例如,下面是我的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#中输入“New Group”,而是想替换它,并在XAML中访问资源字典。因此,该命令将自动获取资源字典中的Name。
我尝试了几种解决方案,比如:

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

等等但它们似乎不起作用。
我正在使用locbaml进行本地化,它不能解析C#上的文本/名称(或者我不知道如何解析),这是我认为唯一可能的解决方案。

svujldwt

svujldwt1#

通常使用FrameworkElement.FindResource是这样的:string s = this.FindResource("NewGroup") as string;工作。更有可能的情况是,键为“NewGroup”的资源不存在于控件或窗口的作用域中(无论this是什么)。您必须确保资源在那里。例如,如果您的资源来自另一个文件,则必须使用MergedDictionaries。您可以测试资源是否实际上是可访问的,尝试从属于您的代码隐藏的XAML访问它,其中定义了OnAddGroup
我希望这是有意义的。

qcbq4gxm

qcbq4gxm2#

如果您无法保证资源的存在,则使用
FrameworkElement.TryFindResource
这将是一个更好的解决方案。它类似于FindResource,但不是抛出异常,TryFindResource返回null,如果没有找到具有提供的键的资源。(TryXxx()方法的实现称为 *TryGet模式 *。)XAML代码隐藏示例:

button.Content = this.TryFindResource("NewGroup");

相关问题