Tengo una aplicación WPF 4.0 que utiliza algunos iconos personalizados de 16x16 en cosas como comandos de menú y similares. Me gustaría tener (por ahora) dos juegos de iconos, los predeterminados Vista/7-ish y algunos XP-ish. Lo que quiero es que el sistema operativo actual determine qué íconos usar.¿Cómo se definen los recursos de icono por tema de sistema?
En este momento, tengo recursos de BitmapImage definidos en diccionarios de recursos de tema (es decir, Aero.NormalColor.xaml, etc.) que apuntan a un recurso PNG específico.
<!-- Aero.NormalColor.xaml -->
<BitmapImage x:Key="IconSave" UriSource="/MyWPFApp;component/Resources/Icons16/Aero/disk.png"/>
<!-- Luna.NormalColor.xaml -->
<BitmapImage x:Key="IconSave" UriSource="/MyWPFApp;component/Resources/Icons16/Luna/disk.png"/>
cualquier lugar en mi aplicación que quiere mostrar un icono conjuntos de propiedades fuente de la imagen/de Icon como StaticResource a uno de estos BitmapImages.
<Image Source="{StaticResource IconSave}"/>
La idea es que desde WPF carga un diccionario temático automáticamente en función del sistema operativo y el tema actual, sólo un conjunto de recursos BitmapImage sería cargado y los iconos mágicamente ser los apropiados.
Esto, sin embargo, no funciona, y aparece la temida excepción "no se puede encontrar el recurso" en tiempo de ejecución. Mi presentimiento es que esto se debe a que los archivos de tema solo se buscan para los controles personalizados, imagen que no es.
Blend 4 no tiene ningún problema con estos, pero tiene definió su archivo especial DesignTimeResources.xaml con una fusión en Aero.NormalColor.xaml. VS2010 se ahoga, pero tampoco usa cosas como archivos DesignData y demás, así que no estoy sorprendido. Actualmente tengo también un archivo de diccionario de recursos separado (MainSkin.xaml) que se fusiona con los recursos de la aplicación. Hacer referencia a estilos y cosas similares funciona bien en tiempo de ejecución.
¿Estoy en el camino correcto y tengo algo ligeramente mal? ¿Debo hacer algo completamente diferente para obtener el efecto deseado y, de ser así, qué?
Tuve que usar una sintaxis de URI de paquete completo para que funcionase: 'paquete: // aplicación: ,,,/Resources/Icons16/Aero/disk.png' De lo contrario, obtuve una' DirectoryNotFoundException' tal como era buscando en C: \ por alguna razón. –