對於本地化,我在.NET中使用資源文件(.resx文件)功能,但我想知道是否有一種智能方式可以直接在XAML中直接綁定各種本地化屬性?XAML中的數據綁定資源文件
資源文件似乎只暴露靜態屬性,我無法弄清楚如何從viewmodel或其他資源字典進行綁定。
此外,如果可能的話,我希望它可以在設計時與Expression Blend一起工作。
對於本地化,我在.NET中使用資源文件(.resx文件)功能,但我想知道是否有一種智能方式可以直接在XAML中直接綁定各種本地化屬性?XAML中的數據綁定資源文件
資源文件似乎只暴露靜態屬性,我無法弄清楚如何從viewmodel或其他資源字典進行綁定。
此外,如果可能的話,我希望它可以在設計時與Expression Blend一起工作。
下面是我如何做到這一點。
WPF:
創建一個資源文件,並在同一個組件創建具有公共構造函數的類。確保資源文件標記爲公開。
在您的XAML文件 - 在命名空間
xmlns:res="clr-namespace:MyProject.StringResources"
爲了您的文字屬性的引用到這個位置,使用下面的結合
TextProperty="{x:Static res:ResourceFileName.ResourceKey}"
的Silverlight :
按照步驟1 & 2以上,然後添加資源文件作爲資源在任何用戶控件或應用程序級別的資源:
<res:ResourceFileName x:Key="resourcesLabels"/>
爲了您的文字屬性使用以下綁定:
TextProperty="{Binding ResourceKey, Source={StaticResource resourceLabels}}"
非常類似於極客提出的,但是我認爲更容易一些:
在相同的程序集中創建一個類,它繼承資源文件並公開構造函數,然後使用此類。
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()
{
}
}
我相信你會被限制在這裏的單個資源文件。 – tsells
您爲每個resx文件添加一個代理類。對於WPF,{x:Static ...}是最簡單的。 –
這似乎適用於WPF。但是,對於Silverlight'x:Static'似乎並不支持。任何想法如何處理? –
添加了Silverlight示例。 – Bryant