2012-04-12 112 views
2

我将Silverlight XAML/C#应用程序转换为Metro。对于C#代码没有问题。对于XAML来说,从我读的内容来看,对XAML有新的支持来简化流程。不过,我希望重复使用相同的resx文件,所以我更喜欢XAML的旧silverlight机制,即Markup Extension或Binding。我只是试过MarkupExtension,但似乎并不支持。如何转换资源绑定。注意我的目标是在资源文件中重用名称 - 值对,因此我将无法使用新的Metro绑定机制。Windows 8地铁XAML本地化

有什么建议吗?

像这样的东西在Silverlight:

XAML:

<sdk:TabItem Header="{Binding Path=Resource.charts, Source={StaticResource LocalizedStrings}}"/> 

LocalizedStrings.cs

public partial class LocalizedStrings 
    { 

     private static Resources.Resource resource = new Resources.Resource(); 

     public Resources.Resource Resource { get { return resource; } } 
    } 

新的Metro风格的定位,我将无法使用,由于旧码重复使用:

<TextBlock x:Uid="HelloWorld" /> 

回答

1

我最终写了一个转换器来改变我所有的资源文件。 Silverlight资源文件中的“somekey”被转换为“somekey.Content”。这将通过Content属性自动处理一些UI元素,例如Button。

0

如果您不想更改名称/值对,则必须使用ResourceLoader类来访问.resw文件。

var resourceLoader = new ResourceLoader(); 
// access a given name key 
var var someValue = resourceLoader.GetString("someKey"); 

这意味着您必须编写相当多的属性来绑定,并将XAML更改为新的可绑定属性。因此,毕竟可能需要考虑更改为新的Metro本地化。

有关本地化的完整示例可以在win8 dev center上找到。