2010-05-26 24 views
10

Tengo una aplicación WPF en la que me gustaría usar algunos recursos estáticos. He creado un archivo XAML de la Biblioteca de recursos que contiene un recurso. También agregué una cadena a los Recursos del proyecto a través del panel Propiedades.¿Cómo uso los recursos globales en WPF?

que supone tan sólo pudiera utilizar estos recursos con la expresión de enlace:

{StaticResource ResourceName} 

Pero Visual Studio me está diciendo que no se encuentran los recursos. ¿Debo incluir algún tipo de referencia en mi XAML? Los ejemplos que he visto sólo incluyen los recursos a nivel local, tales como:

<Window.Resources>, <Page.Resources> etc 

no quiero incluir los recursos a nivel local porque yo quiero que sean disponibles para múltiples partes de la aplicación.

Respuesta

9

ponerlos en el App.xaml :)

En cada aplicación WPF hay un App.xaml (y su correspondiente archivo de código , App.xaml.cs o App.xaml.vb) que funciona como un archivo global para las declaraciones de ancho de aplicación . Puede utilizar este archivo para declarar una apariencia constante en su aplicación. Por ejemplo, puede declarar un fondo rojo predeterminado para todos los botones en una aplicación .

http://www.microsoft.com/emea/msdn/thepanel/en/articles/introduction_wpf.aspx

+0

En mi proyecto esto fue nombrado por defecto como Application.xaml. Es una buena respuesta, pero ¿no puedo hacer que los estilos en mi ResourceLibrary estén disponibles globalmente? – Banford

+0

link not working – tabby

2

vistazo a la sección de "recurso estático comportamiento de búsqueda" here. Cualquier cosa en el diccionario de recursos de la aplicación (es decir, Application.Resources) está disponible globalmente. Cada vez que busca un recurso con una clave determinada y la clave no se utiliza en ningún lugar de la jerarquía de los diccionarios de recursos locales, se devolverá el que está en el diccionario de la aplicación.

Para llenar el diccionario de recursos de la aplicación en XAML, busque el archivo XAML para la aplicación (generalmente App.xaml) y agregue un elemento Application.Resources.

+0

Entiendo cómo funciona el comportamiento de búsqueda hasta esta zona de Application.Resources, pero ¿cómo usaría un recurso que esté configurado en el proyecto? P.ej. Haga clic con el botón derecho en el archivo del proyecto, haga clic en Propiedades, vaya a recursos. Me refiero a los recursos ahí. No están incluidos en mi Application.Resources y tampoco lo está mi archivo xaml de Resource Library. – Banford

+0

Así que he usado .. < ResourceDictionary fuente = "Activos/Recursos/Styles.xaml" /> Y eso ha resuelto uno de los problemas al permitir usar los estilos en mi diccionario de recursos externo. Todavía está luchando en el recurso real del proyecto. – Banford

+0

Lo siento, no me di cuenta de que estabas tratando de usar los recursos del proyecto. Los recursos del proyecto y los diccionarios de recursos son realmente dos cosas diferentes. Si tiene (por ejemplo) una imagen que es un recurso de proyecto, puede obtenerla en el diccionario de recursos a través de ''. Pero no todas las clases WPF tienen una propiedad 'Source' que puede cargarlo desde los recursos del proyecto. –

0

Solo para agregar mis 2 centavos aquí.

También quería utilizar recursos globales, pero utilizo una clase de aplicación personalizada, por lo que no podía simplemente ponerlo en la aplicación.xaml.

he creado un Resources.xaml en mi ubicación raíz, y luego hicieron esto:

Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("/MyWpfClient;component/Resources.xaml", UriKind.Relative) }); 

pero debe saber que el Resource.xaml debe tener la Acción de generación a 'Página'. Cuando no lo hizo no pudo encontrar algunos tipos que utilicé como convertidores.

2

puede crear un diccionario de recursos globales e incluyen en su camino App.xaml

<Application.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="/YourProject;Component/YourXamlFile.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 

Ahora todos sus recursos en la YourXamlFile.xaml serán visibles a nivel mundial en su proyecto.

Cuestiones relacionadas