2011-09-20 11 views
9

Para la localización Estoy utilizando la funcionalidad de archivo de recursos (archivos .resx) en .NET, pero me pregunto si existe una forma inteligente de enlazar las diversas propiedades de localización directamente en XAML.Archivo de recursos Databind en XAML

El archivo de recursos solo parece exponer propiedades estáticas, que no puedo deducir cómo enlazar desde un modelo de vista u otro diccionario de recursos.

Además, si es posible, me gustaría que funcione en tiempo de diseño con Expression Blend.

Respuesta

18

Así es como lo hago.

WPF:

  1. Crear un archivo de recursos y en el mismo conjunto crear una clase que tiene un constructor público. Asegúrese de que el archivo de recursos esté marcado como público.

  2. En su archivo XAML - añadir una referencia a esta ubicación en los espacios de nombres

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

  3. Para su propiedad text utilizar los siguientes unión

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

Silverlight :

  1. Siga los pasos 1 & 2 anterior y luego agregar el archivo de recursos como recurso, ya sea en el control de usuario o en un recurso de nivel de aplicación:

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

  2. Para su propiedad de texto Utilice la continuación de la unión :

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

+1

Eso parece funcionar para WPF. Sin embargo, para Silverlight 'x: Static' no parece ser compatible. ¿Alguna idea sobre cómo manejar eso? –

+0

Ejemplo agregado de Silverlight. – Bryant

2

muy similar a lo que Geek propuso, pero creo que un poco más fácil:

Cree una clase en el mismo ensamblaje, que hereda el archivo de recursos y expone un constructor público, luego use esta clase.

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

Creo que estaría limitado a un solo archivo de recursos aquí. – tsells

+0

Agrega una clase proxy por archivo resx. Para WPF, {x: Static ...} es más fácil. –

Cuestiones relacionadas