2010-09-03 7 views
6

He estado trabajando en una aplicación para Windows Phone 7, y después de buscar en Google, parece que para las imágenes que he agregado al proyecto de Visual Studio, debo establecer la acción de compilación en "Contenido" para poder capaz de hacer referencia a las imágenes en mi aplicación.¿cuál es la acción de compilación correcta para los archivos de imagen de windows phone 7?

Sin embargo, la plantilla de proyecto de la aplicación de lista de Windows Phone incluye una imagen (ArrowImg.png) que tiene su Acción de compilación establecida en "Recurso", y todavía está disponible para ser referenciada desde la aplicación.

Me preguntaba si alguien podría confirmar que definitivamente deberíamos utilizar la acción de compilación de contenido, o si hay alguna forma de acceder a las imágenes agregadas a un proyecto con la acción de compilación de recursos como se muestra en el ejemplo del proyecto, que deberíamos estar usando en su lugar?

Respuesta

10

Si establece la acción en "Contenido", la imagen se incluye "tal cual" en el XAP. Si establece la acción en "Recurso", la imagen se incrusta en una DLL compartida.

En muchas situaciones puede usar cualquiera. Puede haber un problema de rendimiento, u otro, con el uso de uno en lugar de otro, pero no conozco y nunca he notado ninguno.

Por lo que vale, a menos que necesite específicamente convertirlo en un recurso, uso contenido.

Con las herramientas actuales (Beta), he visto a VS quejarse de que las imágenes referenciadas directamente en XAML deberían establecerse en "Recurso" (si se establece en "Contenido") pero la aplicación funciona bien con cualquiera. Esperemos que este sea un problema que se abordará en las herramientas de RTM.

Para obtener más información, véase la discusión en What are the various "Build action" settings in Visual Studio project properties and what do they do?

+0

gracias por la respuesta - por lo que definitivamente han logrado hacer referencia a una imagen con una acción de acumulación de recursos en las herramientas beta WP7? (Lo intenté durante bastante tiempo pero no pude, lo cual fue un poco frustrante ya que es lo que hace el proyecto de muestra ...) –

+0

Accedí a las imágenes como recursos en las herramientas beta en el código utilizando la aplicación .GetResourceStream (nuevo Uri (nombre de archivo, UriKind.Relativo)); También me he referido directamente a las imágenes de ambos tipos de compilación en XAML. VS crea una advertencia sobre el recurso pero aún funciona. Supongo que depende de cómo desee consultarlos –

+4

Usar contenidos en lugar de recursos también minimizará el tamaño de los ensamblajes, lo que reducirá el tiempo de inicio de la aplicación (consulte el [whitepaper de alto rendimiento] (http: //www.jeff. wilcox.name/2010/08/windows-phone-performance/) para más detalles). –

3

sea para construir una acción es correcta.

También vale la pena mirar cuando se resuelven los problemas relacionados con la acción de compilación es la ruta que utiliza.

He visto a algunas personas corriendo problemas con esto porque asumen que han establecido su acción de compilación de forma inapropiada.

Puede configurar la acción de compilación de cualquier manera para que se adapte a sus necesidades de cuándo incurrir en el costo del tiempo de carga, solo tiene que ajustar la ruta a su gusto.

Más información sobre el tema de esta publicación.

Set source to image in C#

Usted puede comparar el contenido de la versión carga diferida de los recursos.

La diferencia es que incurrirá el golpe el rendimiento de todos los recursos cuando las asambleas se cargan al iniciar su aplicación.

Contenido, por otro lado, el golpe de rendimiento se difiere a cuando lo usa .

Cuál es más conveniente variará en un caso por caso.

Tenga en cuenta también que la ruta a recursos de referencia y el contenido es diferente como se puede ver aquí.

//Uri uri = new Uri("/Resources/Images/MyImage.jpg", UriKind.Relative); // Content 
    Uri uri = new Uri("/PhoneApp;component/Resources/Images/MyImage.jpg", UriKind.Relative); // Resource 
    BitmapImage imgSource = new BitmapImage(uri); 
    image1.Source = imgSource; 
+0

También vale la pena señalar, puedes echar un vistazo al impacto de esto tiene en su paquete de XAP al cambiar el nombre de su XAP a ZIP y abrirlo para verlo. –