2011-03-25 13 views
8

Actualmente lo estoy haciendo así que:título de la ventana de datos se unen a recursos de aplicaciones

public MainWindow() 
    { 
     InitializeComponent(); 
     Title = Properties.Resources.WindowName; 
    } 

Cómo hacer lo mismo a través de la unión de WPF?

EDITAR: Todavía no funciona en XAML.
Medio Ambiente: VS2010, .NET 4.0, Windows 7.
pasos de reproducción:
Crear clase ClassLibrary1 biblioteca con código:

namespace ClassLibrary1 
{ 
    static public class Class1 
    { 
     static public string Something 
     { 
      get { return "something"; } 
     } 
    } 
} 

Crear uso de las ventanas de WPF en .NET 4.0 VS2010. XAML
Editar de la ventana principal:

<Window x:Class="ahtranslator.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"   
    xmlns:ClassLibrary1="clr-namespace:ClassLibrary1;assembly=ClassLibrary1" 
    Title="{Binding Source={x:Static ClassLibrary1:Class1}, Path=Something}" 
    Height="350" Width="525" Icon="/ahtranslator;component/Icon1.ico" WindowStyle="SingleBorderWindow" ShowInTaskbar="False" DataContext="{Binding}"> 

...

mensaje de error

Compilación:
MainWindow.xaml (7130): error MC3029: 'ClassLibrary1: Clase 1' miembro no es válida, ya que hace no tener un nombre de tipo calificado.

También encontré este tema My.Resources in WPF XAML?. Y parece que todo debería funcionar, pero no es así.

Microsoft no proporciona la descripción para este mensaje de error. Solo otro tema en el foro de ayuda http://social.msdn.microsoft.com/Forums/en/wpf/thread/4fe7d58d-785f-434c-bef3-31bd9e400691, que tampoco ayuda.

+0

El camino en este caso debe estar dentro de la 'x: Static' ya que la propiedad es estática, es decir,' {Binding Fuente = {x: Static ClassLibrary1: Class1.Something}} ', consulte la sintaxis en la [página de referencia] (http://msdn.microsoft.com/en-us/library/ms742135.aspx). También actualicé mi respuesta que fue equivocada ... –

Respuesta

0

que en realidad tienen el título de un recurso estático definido en la parte superior de la aplicación y que se unen al Título y cualquier otra cosa que quieran que

<s:String x:Key="ApplicationName">My Application</s:String> 
10

En el código se vería así que pienso:

Binding titleBinding = new Binding("WindowName"); 
titleBinding.Source = Properties.Resources; 
this.SetBinding(Window.Title, titleBinding); 

Esto sólo tiene sentido si los cambios pueden ocurrir al título y la unión será notificado de estos cambios (WindowName tiene que ser una propiedad de dependencia o Resources necesidades para implementar INotifyPropertyChanged)

Si Properties es un espacio de nombres (como sería el caso de las propiedades generadas-VS defecto) tiene que declarar en algún lugar usando xmlns & uso x:Static:

<Window 
    ... 
    xmlns:prop="clr-namespace:App.Properties" 
    Title="{Binding Source={x:Static prop:Resources.WindowName}}"> 

Otra nota: Si se utiliza el conseguido recursos de Visual Studio debe asegurarse de que el modificador de acceso de las propiedades sea public, el valor predeterminado es internal, lo que generará una excepción, ya que el enlace solo funciona para las propiedades públicas.

+0

Gracias. Su última sugerencia es mi caso, pero no funciona. Por favor, ve EDITAR: de mi publicación. Lo hice todo lo claro que pude imaginar: moví la clase a un ensamblaje diferente y así sucesivamente. – alehro

+0

He editado mi respuesta para dar más sugerencias, espero que algo de esto se adapte a su problema. –

+0

El código detrás del método que lista primero no funciona. No puede establecer 'Properties.Resources' como fuente de enlace. "... Los recursos son un tipo, que no es válido en el contexto dado" Intenté especificar la clave de recursos allí, y la acepta, pero el enlace falla. El texto no muestra nada –

0

¿Ha intentado cambiar el modificador de acceso del recurso de interno a público?

Acabo de tener algún problema con eso en este momento.

/// <summary> 
    /// Looks up a localized string similar to Has been impossible to load the configuration information. 
    /// </summary> 
    internal static string ERROR_NoConfigurationLoaded { 
     get { 
      return ResourceManager.GetString("ERROR_NoConfigurationLoaded", resourceCulture); 
     } 
    } 

a

/// <summary> 
    /// Looks up a localized string similar to Has been impossible to load the configuration information. 
    /// </summary> 
    public static string ERROR_NoConfigurationLoaded { 
     get { 
      return ResourceManager.GetString("ERROR_NoConfigurationLoaded", resourceCulture); 
     } 
    } 
+1

Sí, lo he hecho. Por favor, mire el código fuente de ClassLibrary1 de mi pregunta. Hay todo público. – alehro

1

simplemente eliminar esta:

... ;assembly=ClassLibrary1" 
Cuestiones relacionadas