c# wpf image button

c# - Imagen en el botón WPF no visible en Runtime



button (8)

Cambie la acción de compilación a ''Recurso''. También tu url del paquete está mal. Cualquiera de usar:

Source="pack://application:,,,/Resource/UserCost2013Open16.png"

o simplemente

Source="/Resource/UserCost2013Open16.png"

Todo, tengo el siguiente comienzo para una pequeña aplicación que comprueba los archivos .resx por la consistencia de los corchetes incrustados (de modo que los errores de tiempo de ejecución de las cadenas "... {0}" que no coinciden no se producen). Tengo el siguiente XAML para MainWindow.xaml, y mi problema particular se relaciona con la imagen que se mostrará en el botón

<Window x:Class="ResxChecker.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="174.383" Width="495.869"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="350*"/> <ColumnDefinition Width="Auto"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="30*"/> </Grid.RowDefinitions> <Label Content="Select .resx file:" HorizontalAlignment="Left" Margin="10,0,0,0" VerticalAlignment="Top" Height="24" Width="Auto" Grid.ColumnSpan="1"/> <TextBox Grid.ColumnSpan="2" HorizontalAlignment="Stretch" Margin="10,0,0,0" Grid.Row="1" TextWrapping="Wrap" Text="" VerticalAlignment="Top"/> <Button Grid.Column="2" HorizontalAlignment="Right" Margin="5,0,10,0" Grid.Row="1"> <Image VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="16 " Width="16" Source="pack://siteoforigin:,,,/Resources/UserCost2013Open16.png"/> </Button> </Grid> </Window>

La imagen tiene ''Build Action = Resource'', ''Copy to output directory = Do not copy'' - la imagen se muestra en el diseñador pero no en el tiempo de ejecución. He visto las siguientes preguntas y leí las respuestas relevantes, pero ninguna resuelve el problema:

  1. Las imágenes de control WPF no se muestran cuando las consume una aplicación

  2. problema de imagen en wpf (la imagen no aparece)

  3. Imagen de fondo del botón que no se muestra en WPF

¿Cómo obtengo la imagen del botón para que aparezca en tiempo de ejecución?


Debe agregar cualquier cosa dentro de Solution Explorer of Visual Studio. En lugar de simplemente copiar la imagen a la carpeta en el Explorador de Windows, presione el botón derecho en cualquier carpeta en el Explorador de soluciones, vaya a Agregar> Elemento existente ... y seleccione la ruta a su recurso para agregar.


Definí mi imagen como siguiente:

<Image Source="/Resources/Images/icon.png"/>

La imagen se muestra en el diseñador de Visual Studio pero no se muestra ninguna imagen cuando la lancé. Me hizo loco! Intenté todas las acciones de compilación con limpieza / compilación, sin suerte.

En mi caso, el problema está causado por el hecho de que el control (que usa Image ) y la aplicación en sí están en proyectos diferentes. La carpeta Resources / Images está en el proyecto Controls . Como resultado, la aplicación intentó encontrar icon.png en su propia carpeta Debug, pero en realidad está en la carpeta Debug de Controls .

Entonces, dos soluciones funcionan para mí:

1) poner recursos / imágenes en el proyecto de la aplicación (no tan bueno cuando hay varios proyectos que utilizan controles del proyecto Controls , pero funciona)

2) especifique el nombre del proyecto de controles explícitamente dentro de la imagen :

<Image Source="/Controls;component/Resources/Images/icon.png"/>


En mi caso, tenía las imágenes en un proyecto separado llamado Common y las imágenes estaban en una carpeta llamada Resources en este proyecto. En mi otro proyecto, agregué una referencia a Common y establecí el origen de las imágenes de esta manera:

<Image Source="/Common;component/Resources/anImage.png"/>

Las imágenes tienen la Build Action establecida en Resource y Copy to Output Directory para Do not copy . Sin embargo, por alguna extraña razón, no funcionaba hasta que eliminé todos los archivos de ensamblaje en mi solución e hice una Clean Solution y una Clean Solution Build Solution . No estoy seguro por qué, pero todo comenzó a funcionar en tiempo de ejecución una vez que reconstruí todo. Todavía no puedo entender por qué estaba funcionando en Design Time.


Hay 2 soluciones:

1: Cambia la configuración de la imagen:

Build Action = Content Copy to output directory = Copy if newer Source="pack://siteoforigin:,,,/Resources/UserCost2013Open16.png"


2: cuando se utiliza la aplicación en lugar de siteoforigin en la ruta de origen, debe tener las siguientes formas posibles:

a) La imagen estará en un SubFolder llamado "Resources" y el archivo .exe será pequeño

Source="pack://application:,,,/Resources/UserCost2013Open16.png" Build Action = Content Copy to output directory = Copy if newer

b) La imagen se incluirá en .exe y no existirá ninguna subcarpeta con archivo de imagen

Source="pack://application:,,,/Resources/UserCost2013Open16.png" Build Action = Resource Copy to output directory = Copy if newer


Suponiendo que tienes

  • establece tu Build Action en el Resource

  • establece esa ruta correctamente usando URI-PACK-FORMAT

En mi caso, todavía no se mostraba.

Clean & Rebuild NO solo Build lo solucionó!


Vaya a su imagen presente en la carpeta de recursos, haga clic derecho en la imagen, vaya a propiedades. Haga clic en la propiedad BuildAction y configúrelo como Recurso de ninguno. Eso funcionará


Fuente = "archivo: /// D: /100x100.jpg" /> funciona para mí.