Файл ресурса привязки данных в XAML - PullRequest
9 голосов
/ 20 сентября 2011

Для локализации я использую функцию Resource-file (.resx files) в .NET, но мне интересно, есть ли умный способ привязать данные различных свойств локализации непосредственно в XAML?

Файл ресурсов, по-видимому, предоставляет только статические свойства, которые я не могу понять, как связать из модели представления или другого словаря ресурсов.

Кроме того, если это возможно, я бы хотел, чтобы он работал на дизайн-время с Expression Blend.

Ответы [ 2 ]

18 голосов
/ 20 сентября 2011

Вот как я это делаю.

WPF:

  1. Создайте файл ресурсов и в той же сборке создайте класс, имеющий открытый конструктор.Убедитесь, что файл ресурсов помечен как общедоступный.

  2. В вашем файле xaml - добавьте ссылку на это местоположение в пространствах имен

    xmlns:res="clr-namespace:MyProject.StringResources"

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

    TextProperty="{x:Static res:ResourceFileName.ResourceKey}"

Silverlight:

  1. Followшаги 1 и 2 выше, а затем добавьте файл ресурса в качестве ресурса либо в свой пользовательский элемент управления, либо в ресурс уровня приложения:

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

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

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

2 голосов
/ 23 апреля 2013

Очень похоже на то, что предложил 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()
    {
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...