如何使用 Blend 在 WP7 中的不同视觉状态下设置不同的本地化字符串?

发布于 2024-10-19 17:07:59 字数 1006 浏览 7 评论 0原文

如何使用 Blend 在 WP7 中的不同视觉状态下设置不同的本地化字符串,而无需任何代码隐藏?

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

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

编辑:

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

我有一个名为AppPresources.resx的资源文件。然后我会在代码中执行此操作:

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

然后我有一个来自 MVVM Light Toolkit 的 GlobalViewModelLocator ,其中包含以下数据绑定属性。

    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}}" ... />

How do I set different localized strings in different visual states in WP7 using Blend without any code behind?

I can set different non-localized strings in different visual states (although it flickers). That works, but how about localized strings?

If I change the string using data binding in Blend, Blend just overrides the data binding in Base state and not the actual state where I'm recording.

EDIT:

This is how I localize my strings:

I have a resources file named AppPresources.resx. Then I would do this in code:

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

Then I have a GlobalViewModelLocator from MVVM Light Toolkit with the following Property for Databinding.

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

And in xaml file:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

谁与争疯 2024-10-26 17:07:59

您需要做的事情与您已经在做的事情非常接近。首先,定义一个名为 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 中使用!

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

What you need to do, is very close to what you're already doing. First, define a class named Resources.cs with following content

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

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

This allows us to create a instance of your Resource File in XAML. To do this, open App.xaml and add following

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

Now when you need to do bindings in your XAML, you do it like this:

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

What you'll notice is that it doesn't work in Blend, yet. To make it work in Expression Blend,
add the following file: DesignTimeResources.xaml in the Properties Folder, and add following content

<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>

Now, you press F6 in Visual Studio to recompile, and voila, your localized strings are available in Expression Blend!

A real-world example from one of my projects:

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文