2011-09-20 78 views
9

對於本地化,我在.NET中使用資源文件(.resx文件)功能,但我想知道是否有一種智能方式可以直接在XAML中直接綁定各種本地化屬性?XAML中的數據綁定資源文件

資源文件似乎只暴露靜態屬性,我無法弄清楚如何從viewmodel或其他資源字典進行綁定。

此外,如果可能的話,我希望它可以在設計時與Expression Blend一起工作。

回答

18

下面是我如何做到這一點。

WPF:

  1. 創建一個資源文件,並在同一個組件創建具有公共構造函數的類。確保資源文件標記爲公開。

  2. 在您的XAML文件 - 在命名空間

    xmlns:res="clr-namespace:MyProject.StringResources"

  3. 爲了您的文字屬性的引用到這個位置,使用下面的結合

    TextProperty="{x:Static res:ResourceFileName.ResourceKey}"

的Silverlight :

  1. 按照步驟1 & 2以上,然後添加資源文件作爲資源在任何用戶控件或應用程序級別的資源:

    <res:ResourceFileName x:Key="resourcesLabels"/>

  2. 爲了您的文字屬性使用以下綁定:

    TextProperty="{Binding ResourceKey, Source={StaticResource resourceLabels}}"

+1

這似乎適用於WPF。但是,對於Silverlight'x:Static'似乎並不支持。任何想法如何處理? –

+0

添加了Silverlight示例。 – Bryant

2

非常類似於極客提出的,但是我認爲更容易一些:

在相同的程序集中創建一個類,它繼承資源文件並公開構造函數,然後使用此類。

public class ResourcesProxy : Properties.Resources 
{ 
    /// <summary> 
    /// resolves the problem of internal constructor in resources.designer.cs 
    /// in conjunction with xaml usage 
    /// </summary> 
    public ResourcesProxy() : base() 
    { 
    } 
} 
+0

我相信你會被限制在這裏的單個資源文件。 – tsells

+0

您爲每個resx文件添加一個代理類。對於WPF,{x:Static ...}是最簡單的。 –