6

如何在没有任何代码的情况下使用 Blend 在 WP7 中以不同的视觉状态设置不同的本地化字符串?

我可以在不同的视觉状态下设置不同的非本地化字符串(尽管它会闪烁)。那行得通,但是本地化的字符串呢?

如果我在 Blend 中使用数据绑定更改字符串,Blend 只会覆盖 Base 状态中的数据绑定,而不是我正在录制的实际状态。

编辑:

这就是我本地化字符串的方式:

我有一个名为AppPresources.resx. 然后我会在代码中这样做:

    // setting localized button title
    mainButton.Content = AppResources.MainButtonText;

然后我有一个GlobalViewModelLocator来自 MVVM Light Toolkit 的具有以下数据绑定属性。

    private static AppResources _localizedStrings;
    public AppResources LocalizedStrings
    {
        get
        {
            if (_localizedStrings == null)
            {
                _localizedStrings = new AppResources();
            }
            return _localizedStrings;
        }
    }

在 xaml 文件中:

<Button x:Name="mainButton" Content="{Binding LocalizedStrings.MainButtonText, Mode=OneWay, Source={StaticResource Locator}}" ... />
4

1 回答 1

4

您需要做的事情与您已经在做的事情非常接近。首先,定义一个名为Resources.cs的类,其内容如下

public class Resources
{
    private static AppResources resources = new AppResources();

    public AppResources LocalizedStrings
    {
        get
        {
            return resources;
        }
    }
}

这允许我们在 XAML 中创建资源文件的实例。为此,请打开App.xaml并添加以下内容

<Application.Resources>
    <local:Resources x:Key="Resources" />
</Application.Resources>

现在,当您需要在 XAML 中进行绑定时,您可以这样做:

<Button Content="{Binding LocalizedStrings.MainButtonText,
                          Source={StaticResource Resources}}" />

你会注意到它在 Blend 中还不起作用。要使其在 Expression Blend 中工作,请在 Properties 文件夹中添加以下文件: DesignTimeResources.xaml ,并添加以下内容

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:local="clr-namespace:YourNameSpace">
    <local:Resources x:Key="Resources" />
</ResourceDictionary>

现在,您在 Visual Studio 中按 F6 重新编译,瞧,您的本地化字符串在 Expression Blend 中可用!

我的一个项目中的一个真实示例:

于 2011-07-24T17:03:57.857 回答