Estoy tratando de configurar el código fuente de una imagen WPF. La imagen está incrustada como un recurso en el proyecto. Al mirar ejemplos, he encontrado el siguiente código. Por alguna razón no funciona, la imagen no aparece.
Al depurar puedo ver que la secuencia contiene los datos de la imagen. ¿Así que qué hay de malo?
Assembly asm = Assembly.GetExecutingAssembly();
Stream iconStream = asm.GetManifestResourceStream("SomeImage.png");
PngBitmapDecoder iconDecoder = new PngBitmapDecoder(iconStream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
ImageSource iconSource = iconDecoder.Frames[0];
_icon.Source = iconSource;
El icono se define más o menos así: <Image x:Name="_icon" Width="16" Height="16" />
<Image Source="some_fully_qualified_path">
en el XAML nunca falla.Respuestas:
Después de tener el mismo problema que tú y leer un poco, descubrí la solución: URI de paquete .
Hice lo siguiente en código:
O más corto, usando otro constructor de BitmapImage:
El URI se divide en partes:
application:///
Ruta: el nombre de un archivo de recursos que se compila en un ensamblado referenciado. La ruta debe cumplir con el siguiente formato:
AssemblyShortName[;Version][;PublicKey];component/Path
Los tres cortes después
application:
deben ser reemplazados por comas:Y, por supuesto, asegúrese de establecer la acción de compilación en su imagen
Resource
.fuente
BitmapImage(Uri)
constructor, lo que ayuda a evitar la necesidad de llamar a BeginInit y EndInit. Lo he agregado aquí.Esto cargará una imagen llamada "Untitled.png" en una carpeta llamada "Imágenes" con su "Acción de compilación" establecida en "Recurso" en un ensamblaje llamado "WpfApplication1".
fuente
var uriSource = new Uri("Images/Untitled.png", UriKind.Relative);
sería suficienteEsto es un poco menos de código y se puede hacer en una sola línea.
fuente
Muy fácil:
Para configurar dinámicamente la imagen de un elemento de menú, solo haga lo siguiente:
... mientras que "icon.ico" puede ubicarse en todas partes (actualmente está ubicado en el directorio 'Recursos') y debe vincularse como Recurso ...
fuente
También puede reducir esto a una línea. Este es el código que utilicé para configurar el icono de mi ventana principal. Se supone que el archivo .ico está marcado como Contenido y se está copiando en el directorio de salida.
fuente
La forma más simple:
fuente
Has probado:
fuente
Esta es mi manera:
Uso:
fuente
Aquí hay un ejemplo que establece la ruta de la imagen dinámicamente (imagen ubicada en algún lugar del disco en lugar de compilar como recurso):
Reflexiones sobre los iconos ...
En primer lugar, pensaría que la propiedad Icon solo puede contener una imagen. ¡Pero en realidad puede contener cualquier cosa! Descubrí esto por accidente cuando intenté establecer mediante programación la
Image
propiedad directamente en una cadena con la ruta a una imagen. El resultado fue que no mostraba la imagen, ¡sino el texto real de la ruta!Esto lleva a una alternativa para no tener que crear una imagen para el icono, sino usar texto con una fuente de símbolo en su lugar para mostrar un simple "icono". El siguiente ejemplo utiliza la fuente Wingdings que contiene un símbolo "disquete". Este símbolo es realmente el personaje
<
, que tiene un significado especial en XAML, por lo que debemos usar la versión codificada<
. ¡Esto funciona como un sueño! A continuación se muestra un símbolo de disquete como un ícono en el elemento del menú:fuente
Si su imagen está almacenada en un ResourceDictionary, puede hacerlo con solo una línea de código:
fuente
También hay una forma más simple. Si la imagen se carga como un recurso en XAML, y el código en cuestión es el código subyacente para ese contenido XAML:
fuente
Pon el marco en un VisualBrush:
Ponga el VisualBrush en GeometryDrawing
Ahora ponga GeometryDrawing en una imagen de dibujo:
Coloque esto en su fuente de la imagen, y ¡voilà!
Sin embargo, podrías hacerlo mucho más fácil:
Y en código:
fuente
También hay una forma más simple. Si la imagen se carga como un recurso en el XAML, y el código en cuestión es el código detrás de ese XAML:
Aquí está el diccionario de recursos para un archivo XAML: la única línea que le interesa es ImageBrush con la clave "PosterBrush"; el resto del código es solo para mostrar el contexto
Ahora, en el código detrás, puedes hacer esto
fuente
Cómo cargar una imagen incrustada en iconos e imágenes de recursos (versión corregida de Arcturus):
Suponga que desea agregar un botón con una imagen. Que deberias hacer
Ahora es el momento de cargar nuestra imagen en XAML
Hecho.
fuente
Soy nuevo en WPF, pero no en .NET.
Pasé cinco horas intentando agregar un archivo PNG a un "Proyecto de biblioteca de control personalizado de WPF" en .NET 3.5 (Visual Studio 2010) y configurándolo como fondo de un control heredado de imagen.
Nada relacionado con los URI funcionó. No puedo imaginar por qué no hay un método para obtener un URI de un archivo de recursos, a través de IntelliSense, tal vez como:
Probé muchos URI y jugué con ResourceManager y los métodos GetManifest de Assembly, pero todos hubo excepciones o valores NULL.
Aquí pongo el código que funcionó para mí:
fuente
Si ya tiene una transmisión y conoce el formato, puede usar algo como esto:
fuente
Te perdiste un poco.
Para obtener un recurso incrustado de cualquier ensamblaje, debe mencionar el nombre del ensamblado con su nombre de archivo como he mencionado aquí:
fuente