Añadir icono en XAML de WPF ventana causas de error/accidente de VS2012

He encontrado un bug en el XAML de WPF al especificar un icono para una XAML de la Ventana, tratando de ejecutar el programa, se genera un mensaje de error en la línea:

 System.Windows.Application.LoadComponent(Me, resourceLocater)

XamlParseException ocurrido

Aportar valor en el Sistema.Windows.Baml2006.TypeConverterMarkupExtension’ lanzó una excepción.’ Número de línea ‘5’ y la posición de la línea de ‘100’.

He puesto el icono para Always Create en el Copy To Output Directory sin suerte.

He cambiado el icono de Resource a EmbeddedResource – sin suerte.

He añadido a la Resources para el proyecto – aún sin suerte.

He comprobado el archivo y la ubicación del 100%.

El código XAML de la ventana es correcto, el nombre es correcto, la ruta es correcta.

Icon="Resources/VisualizerIcon.ico" 

Perplejo – foros en línea dicen que Copiar en el Directorio de salida es la solución, pero, después de la construcción de la solución, sólo la Carpeta se copia más (aunque lo establece explícitamente el archivo ICO para ser copiados).

Nadie?

  • NOTA: he limpiado el proyecto y el archivo ICO se muestra ahora en la carpeta BIN, pero aún así consigue el mismo error que el anterior.
  • No te ves en : página de msdn
  • no estaba muy seguro de cómo utilizar la información, pero se encontró, si I nombre de la ventana (que no era nombrado antes) y asignar el icono en la _Loaded evebt, funciona bien. El problema es que el icono de la propiedad está en busca de una BitmapSource, no un mapa de bits. Así que he tenido que convertir la imagen a un Bitmapsource a usarlo.
InformationsquelleAutor MC9000 | 2013-11-23

5 Kommentare

  1. 4

    Primero, me alegro de que haya encontrado una solución. Parece que no hay muchos por aquí en realidad se trata de encontrar la solución a sus problemas, y esperan que los demás a encontrar.

    Habiendo dicho eso, ¿por qué no utilizar la configuración del proyecto para configurarlo (clic derecho sobre el proyecto, a continuación, seleccione ‘Propiedades’) ?

    Como en esta captura de pantalla:
    Añadir icono en XAML de WPF ventana causas de error/accidente de VS2012

    Me parece que es más simple, no hay código necesario, y funciona …

    • Esa fue la primera cosa que he probado (he añadido el ico y de otro recurso incrustado el uso de la técnica que se muestran arriba), pero todavía se estrelló con el mismo mensaje de error. Vaya usted a saber.
    • eso es raro … seguro que tenía el tipo de aceptar? y se hizo la costumbre de limpiar, reconstruir, ora a la madera de pollo dioses que se va a construir ok?
    • Podría haber algo que me perdí, esta es mi primera incursión en WPF.
    • Bienvenidos a la WPF vagón entonces … es un paseo agradable una vez que usted consiga los caballos en la dirección correcta. Tener una prueba rápida con una nueva solución. Sólo hay que poner una etiqueta, y tratar de ver si se puede configurar el Icono a través de la configuración. Si sí, algo que está metido en el proyecto. Si no, dang, algo raro está sucediendo.
  2. 3

    Sólo se necesita para establecer la acción de compilación de la real de la imagen/icono de los Recursos, como se muestra en la ventana de propiedades..

    Añadir icono en XAML de WPF ventana causas de error/accidente de VS2012

    Sé que es un viejo post, sólo quería compartir un muñeco de error..

  3. 1

    Tratar de verificación para el interior de la excepción. Si el sitio se ve como:

    al Sistema.Windows.Los medios de comunicación.La proyección de imagen.BitmapSource.CriticalCopyPixels(Del Sistema.Windows.Int32Rect, IntPtr, Int32, Int32)
    en el Sistema.Windows.Los medios de comunicación.La proyección de imagen.BitmapSource.CriticalCopyPixels(Del Sistema.Windows.Int32Rect, Sistema.Matriz, Int32, Int32)
    en el Sistema.Windows.Los medios de comunicación.La proyección de imagen.BitmapSource.CopyPixels(Del Sistema.Windows.Int32Rect, Sistema.Matriz, Int32, Int32)
    en el Sistema.Windows.Los medios de comunicación.La proyección de imagen.BitmapSource.CopyPixels(Del Sistema.Matriz, Int32, Int32)
    en MS. Internal.AppModel.IconHelper.CreateIconHandleFromBitmapFrame(System.Windows.Media.Imaging.BitmapFrame)
    a la SEÑORA Interna.AppModel.IconHelper.CreateIconHandleFromImageSource(Del Sistema.Windows.Los medios de comunicación.ImageSource, Sistema.Windows.El tamaño)
    a la SEÑORA Interna.AppModel.IconHelper.GetIconHandlesFromImageSource(Del Sistema.Windows.Los medios de comunicación.ImageSource, IconHandle ByRef, IconHandle ByRef)
    en el Sistema.Windows.De la ventana.UpdateIcon()
    en el Sistema.Windows.De la ventana.SetupInitialState(Double, Double, Double, Double)
    en el Sistema.Windows.De la ventana.CreateSourceWindow(Boolean)
    en el Sistema.Windows.De la ventana.ShowHelper(Del Sistema.Objeto)
    en el Sistema.Windows.Las operaciones de roscado.ExceptionWrapper.InternalRealCall(Del Sistema.Delegado Del Sistema.Objeto, Int32)
    en el Sistema.Windows.Las operaciones de roscado.ExceptionWrapper.TryCatchWhen(Del Sistema.Objeto, Sistema De.Delegado Del Sistema.Objeto, Int32, Sistema.Delegado)
    en el Sistema.Windows.Las operaciones de roscado.DispatcherOperation.InvokeImpl()
    en el Sistema.Las operaciones de roscado.ExecutionContext.RunInternal(Del Sistema.Las operaciones de roscado.ExecutionContext, Sistema.Las operaciones de roscado.ContextCallback, Sistema.Objeto Boolean)
    en el Sistema.Las operaciones de roscado.ExecutionContext.Ejecutar(El Sistema.Las operaciones de roscado.ExecutionContext, Sistema.Las operaciones de roscado.ContextCallback, Sistema.Objeto Boolean)
    en el Sistema.Las operaciones de roscado.ExecutionContext.Ejecutar(El Sistema.Las operaciones de roscado.ExecutionContext, Sistema.Las operaciones de roscado.ContextCallback, Sistema.Objeto)
    a la SEÑORA Interna.CulturePreservingExecutionContext.Ejecutar(la SEÑORA Interna.CulturePreservingExecutionContext, Sistema.Las operaciones de roscado.ContextCallback, Sistema.Objeto)
    en el Sistema.Windows.Las operaciones de roscado.DispatcherOperation.Invoke()
    en el Sistema.Windows.Las operaciones de roscado.Despachador.ProcessQueue()
    en el Sistema.Windows.Las operaciones de roscado.Despachador.WndProcHook(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
    a la SEÑORA de Win32.HwndWrapper.WndProc(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
    a la SEÑORA de Win32.HwndSubclass.DispatcherCallbackOperation(Del Sistema.Objeto)
    en el Sistema.Windows.Las operaciones de roscado.ExceptionWrapper.InternalRealCall(Del Sistema.Delegado Del Sistema.Objeto, Int32)
    en el Sistema.Windows.Las operaciones de roscado.ExceptionWrapper.TryCatchWhen(Del Sistema.Objeto, Sistema De.Delegado Del Sistema.Objeto, Int32, Sistema.Delegado)
    en el Sistema.Windows.Las operaciones de roscado.Despachador.LegacyInvokeImpl(Del Sistema.Windows.Las operaciones de roscado.DispatcherPriority, Sistema.Periodo De Tiempo, El Sistema.Delegado Del Sistema.Objeto, Int32)
    a la SEÑORA de Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr)
    a la SEÑORA de Win32.UnsafeNativeMethods.DispatchMessage(Del Sistema.Windows.De interoperabilidad.MSG ByRef)
    en el Sistema.Windows.Las operaciones de roscado.Despachador.PushFrameImpl(Del Sistema.Windows.Las operaciones de roscado.DispatcherFrame)
    en el Sistema.Windows.Aplicación.RunDispatcher(Del Sistema.Objeto)
    en el Sistema.Windows.Aplicación.RunInternal(Del Sistema.Windows.Ventana)
    en ClientLauncher.App.Main()

    Entonces usted podría estar ejecutando en un error como este, excepto por lo que podría suceder en el más reciente sistema operativo, como Windows 10. Algunos de nuestros clientes de tener este tipo de accidentes en Windows 10 máquinas.

    La solución es simplificar el archivo de icono, no dejes que contienen tramas mayores de 64*64, o simplemente usar un PNG para el icono de la ventana en su lugar. Lo que se dice de alta resolución, iconos todavía podría ser utilizado como icono de la aplicación.

  4. 1

    Acaba de configurar los Recursos de compilación de propiedad a los Recursos. a continuación, utilice

        <Image width="80" Height="80" Source="Resources/my_image.png"/>

    o en el icono de la ventana de

    <Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:MyApplication" x:Name="Main_Window" x:Class="MainWindow"
        Title="MainWindow" Height="600" Width="800" Icon="Resources/icon.ico">
    • Esto es sólo porque usted está haciendo referencia a un archivo ICO directamente, si usted repuso con {StaticResource} de la unión a la <Image> de los recursos que obtendría una excepción como «Sistema.Windows.Imagen de’ no es válido para la propiedad ‘Icono’.»
  5. 0

    Aquí es lo que se me ocurrió (no es elegante, pero funciona)
    En el evento loaded por la ventana:

    Private Sub TileLayout_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
        Me.winTileLayout.Icon = Bitmap2BitmapSource(My.Resources.VisualizerIcon.ToBitmap)
    End Sub

    Y la función auxiliar:

    Public Shared Function Bitmap2BitmapSource(bmp As System.Drawing.Bitmap) As BitmapSource
        Dim retval As BitmapSource = Nothing
        Dim hBitmap As IntPtr = bmp.GetHbitmap()
        Try
            retval = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(hBitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions())
        Catch ex As Win32Exception
            retval = Nothing
        Finally
            DeleteObject(hBitmap)
        End Try
        Return retval
    End Function

    La DeleteObject código:

    <System.Runtime.InteropServices.DllImport("gdi32.dll")> _
    Public Shared Function DeleteObject(hObject As IntPtr) As Boolean
    End Function

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea