- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想知道如何动态构建一个字符串来引用我的 Resources.resx 文件中的一个字符串?我基本上想在 XAML 中执行以下等效操作:
这样我就可以获得标题为 ToyBlockName
或 ToyBallName
的资源,它们应该来自 resx,以便在必要时进行翻译。然后我希望将这些单独的字符串插入到其他字符串的格式中。有很多字符串使用这些名称,所以最好是我可以替换单个单词,而不是为我拥有的每种玩具使用每个字符串的版本。
一些示例字符串是The {0} comes in a box.
,{0} 只需几美元。
基本上尝试在 XAML 中执行此操作:
String.Format(Properties.Resources.Default["ToyComesInBox"],
Properties.Resources.Default["Toy" + Constants.ToyName + "Name"]);
(其中 ToyName = "Block"或 "Ball"等)
有没有一种方法可以在 XAML 中完成此操作,或者是否有其他我没有想到的方法?
最佳答案
我认为仅使用 XAML 是不可能做到这一点的,但我们正在使用转换器来做到这一点。它可能会变得非常困惑,但是如果你比我设计得更好,它就会有更大的潜力,并且它会让代码变得更好 IMO。
public class LocalizationConverter : IValueConverter
{
public object Convert(
object value,
Type targetType,
object parameter,
string language)
{
string valueString = value as string;
var paramString = parameter as string;
//so here you have the value of your binding in the value string
//and if it's empty (because you don't want to use the bound value
//you're setting the value string to be the param string
if (string.IsNullOrWhiteSpace(valueString))
{
valueString = paramString;
}
//if value string (formerly your param string is empty just return
//there is no value to be found
if (string.IsNullOrWhiteSpace(valueString))
{
return null;
}
//now the fun starts :) ,I pass values with small command and
//separator symbol to be able to parse my parameters
//something like this:
//if (paramString.StartsWith("AddAfter|"))
//{
// var valToAppend = paramString.Substring("AddAfter|".Length);
// return Strings.Get(Strings.Get(valToAppend + valueString));
//}
//and this basically does -> append the given parameter string after
//the part with the command to the value that comes from the binding
//and then uses the resulting string from res dictionary
//So you could do something like passing "ToyType|Block" or you can
//pass something in the value like Block and then in the parameters
//have description ToyType or even pass not string object and get
//what you want from it like
//if(value is ToyType)
//{
// return StringsGet((value as ToyType).Name)
//}
//Your parsing logic HERE
//This is how we get strings from resources in our project
//that you already know how to do
return Strings.Get(valueString);
}
public object ConvertBack(
object value,
Type targetType,
object parameter,
string language)
{
throw new NotImplementedException();
}
}
用法
在资源中定义(页面或全局)
<converters:LocalizationConverter x:Key="Loc" />
在 XAML 中使用
仅来自参数的值(在本例中为字符串)
<TextBlock Text="{Binding
Converter={StaticResource Loc},
ConverterParameter=ToyBlockName}" />
或者仅来自绑定(bind)变量的值(可以是任何类型的对象)
<TextBlock Text="{Binding ToyBlockNameBoundValue
Converter={StaticResource Loc}}" />
或者来自绑定(bind)变量的值+可以解析的复杂参数
<TextBlock Text="{Binding SomeBoundValue
Converter={StaticResource Loc},
ConverterParameter=SomeMoreComplex|Parameter}" />
关于c# - 如何构建字符串以动态访问 .resx 资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33243727/
有人告诉我,如果我只有一个“东西”,比如家(不是多个家),我应该在 routes.rb 中使用资源 :home,而不是资源 :home。但是当我查看路由时,POST 函数似乎想要 home#creat
Activity 开始。这些代码框架顺利通过。 // Initialize array adapters. One for already paired devices and //
资源 search-hadoop.com search-hadoop.com索引所有邮件列表,非常适合历史搜索。当你遇到问题时首先在这里搜索,因为很可能有人已经遇到了你的问题。 邮件列表 在A
我是 WPF 的新手,正在努力使用位于单独程序集中的样式。这就是我正在做的:- 我有一个带有\Themes 文件夹的类库项目,其中包含一个“generic.xaml”,它合并了\Themes 内的子文
我正在编写一个使用虚拟树状文件结构的插件。基本上它就像一个包含文件的标准文件系统,区别在于这些文件实际上并不存在于文件系统中的特定位置,而只是 java 对象。 这些当前由使用 SettingProv
如果我在 XAML 中使用以下内容,我会收到错误消息: 错
我正在使用 laravel 资源来获取 api 的数据: return [ 'id' => $this->id, 'unread' =>
我有以下 pom.xml: 4.0.0 mycompany resource-fail 0.0.1-SNAPSHOT BazBat
许多GDI +类都实现IDisposable,但是我不确定何时应该调用Dispose。对于使用new或静态方法(例如Graphics.CreateGraphics)创建的实例来说,这很明显。但是,由属
我正在构建一组 RESTful 资源,其工作方式如下:(我将使用“people”作为示例): 获取/people/{key} - 返回一个人对象 (JSON) GET/people?first_nam
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我有一个使用 $resource 的简单 Controller : var Regions = $resource('mocks/regions.json'); $scope.regions =
在 Azure 门户中,如何查看不同资源之间的依赖关系。我特别想查看哪些资源正在使用我要删除的存储。 最佳答案 您可以使用应用程序洞察应用程序 map 来执行此操作: 您还可以打开存储帐户的日志记录:
我正在使用 ionic 生成资源(图标和启动画面)。我正在使用 ionic v2.1.0 和 cordova v6.4.0。 到目前为止我一直在使用(它在以前的版本中工作): cordova plat
是否可以使用 Assets 包含子文件夹中的文件? 示例:[base_url]/assets/css/pepper-grinder/jquery-ui-1.8.11.custom.min.css 最佳
我正在阅读一些尝试教授 Android 开发的书。在书中,作者概述了 res/下的一些目录。他提到 res/menu 包含基于 XML 的菜单规范。他还提到了保存“通用文件”的 res/raw。当我创
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 9 年前。 Improv
我在服务器上使用 express-resource。在我的 AngularJS Controller 中: var User = $resource('/services/users/:use
因此,每当我运行我的应用程序时,它都会立即崩溃并给出以下错误: No package identifier when getting value for resource number 0x00000
对于我正在创建的(网络)应用程序,我需要使用基本身份验证在我的 UIWebView 中加载页面。 现在设置我使用的授权 header : NSString *result = [NSString st
我是一名优秀的程序员,十分优秀!