Как установить разные локализованные строки в разных визуальных состояниях в WP7, используя Blend? - PullRequest
6 голосов
/ 02 марта 2011

Как мне установить разные локализованные строки в разных визуальных состояниях в WP7, используя Blend без какого-либо кода позади?

Я могу установить разные нелокализованные строки в разных визуальных состояниях (хотя это мерцает).Это работает, но как насчет локализованных строк?

Если я изменяю строку, используя привязку данных в Blend, Blend просто переопределяет привязку данных в базовом состоянии, а не в фактическом состоянии, в котором я записываю.1006 * РЕДАКТИРОВАТЬ:

Вот как я локализую свои строки:

У меня есть файл ресурсов с именем 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}}" ... />

1 Ответ

4 голосов
/ 24 июля 2011

То, что вам нужно сделать, очень близко к тому, что вы уже делаете. Сначала определите класс с именем 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, добавьте следующий файл: 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>

Теперь вы нажимаете F6 в Visual Studio, чтобы перекомпилировать, и вуаля, ваши локализованные строки доступны в Expression Blend!

Реальный пример из одного из моих проектов:

...