2011-09-20 3 views
9

Для локализации я использую функциональные возможности Resource-file (.resx) в .NET, но мне интересно, есть ли способ гибкой привязки различных свойств локализации непосредственно в 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 &-выше, а затем добавить файл ресурсов как ресурс либо ваш контроль пользователя или ресурс на уровень приложения:

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

  2. Для вашего текстового свойства используйте следующие привязки :

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

+1

Это похоже на работу с WPF. Однако для Silverlight 'x: Static', похоже, не поддерживается. Любые идеи о том, как с этим справиться? –

+0

Добавлен пример Silverlight. – Bryant

2

Очень аналогично тому, что предложил Geek, но даже немного проще:

Создайте класс в той же сборке, которая наследует файл ресурсов и предоставляет открытый конструктор, а затем используйте этот класс.

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 ...} проще всего. –

Смежные вопросы