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:
¿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 elResource
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í.