2011-09-20 4 views
9

Do lokalizacji Używam funkcji plików Resource-file (.resx) w .NET, ale zastanawiam się, czy istnieje inteligentna metoda porównywania różnych właściwości lokalizacji bezpośrednio w XAML?Plik zasobów Databind w XAML

Plik zasobów tylko wydaje się eksponować właściwości statyczne, które nie mogę dowiedzieć się, jak powiązać z viewmodel lub inny słownik zasobów.

Ponadto, jeśli to możliwe, chciałbym, aby działało w czasie projektowania dzięki Expression Blend.

Odpowiedz

18

Oto jak to robię.

WPF:

  1. Utwórz plik zasobów i w tym samym zespole utworzyć klasę, która ma konstruktora publicznego. Upewnij się, że plik zasobów jest oznaczony jako publiczny.

  2. W swoim pliku XAML - dodać odwołanie do tego miejsca w przestrzeni nazw

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

  3. Dla właściwości text używać następujących wiążące

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

Silverlight :

  1. Wykonaj kroki od 1 & 2 powyżej, a następnie dodać plik zasobów jako zasób w obu kontrolą użytkownika lub zasobu poziomu aplikacji:

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

  2. dla nieruchomości tekstu używać następujących wiązania :

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

+1

To wydaje się działać dla WPF. Jednak w przypadku Silverlight 'x: Static' nie jest obsługiwane. Jakieś pomysły, jak sobie z tym poradzić? –

+0

Dodano przykład Silverlight. – Bryant

2

Bardzo podobne do tego, co zaproponował Geek, ale nawet nieco łatwiejsze:

Utwórz klasę w tym samym zestawie, który dziedziczy plik zasobów i udostępnia publiczny konstruktor, a następnie użyj tej klasy.

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

Sądzę, że ograniczyłbyś się do jednego pliku zasobów tutaj. – tsells

+0

Dodajesz jedną klasę proxy dla każdego pliku resx. W przypadku WPF {x: Static ...} jest najłatwiejszy. –