IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

Cast entre ImageSource et ArrayExtension.Item dans VS2010: exception (compilation et runtime OK)


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 346
    Par défaut Cast entre ImageSource et ArrayExtension.Item dans VS2010: exception (compilation et runtime OK)
    Bonjour!

    Je teste VS2010 sur un projet WPF VS2008.

    En design mode, ma fenetre WPF affiche une exception:
    at
    BoolToImageSourceConverter.Convert(Object value, Type targetType, Object parameter, CultureInfo culture) in \converters\BoolToImageSourceConverter.cs:line 26
    at System.Windows.Data.BindingExpression.TransferValue(Object newValue, Boolean isASubPropertyChange)
    at System.Windows.Data.BindingExpression.Activate(Object item)
    at System.Windows.Data.BindingExpression.AttachToContext(AttachAttempt attempt)
    at System.Windows.Data.BindingExpression.MS.Internal.Data.IDataBindEngineClient.AttachToContext(Boolean lastChance)
    at MS.Internal.Data.DataBindEngine.Task.Run(Boolean lastChance)
    at MS.Internal.Data.DataBindEngine.Run(Object arg)
    at MS.Internal.Data.DataBindEngine.OnLayoutUpdated(Object sender, EventArgs e)
    at System.Windows.ContextLayoutManager.fireLayoutUpdateEvent()
    at System.Windows.ContextLayoutManager.UpdateLayout()
    at System.Windows.UIElement.UpdateLayout()
    at System.Windows.Interop.HwndSource.SetLayoutSize()
    at System.Windows.Interop.HwndSource.set_RootVisualInternal(Visual value)
    at System.Windows.Interop.HwndSource.set_RootVisual(Visual value)
    at MS.Internal.Designer.VSIsolatedDesigner.ViewHolder.Initialize()
    at MS.Internal.Designer.VSIsolatedDesigner.ViewHolder..ctor(UIElement content)
    at MS.Internal.Designer.VSIsolatedDesigner.VSIsolatedView.get_ViewHandle()
    at MS.Internal.Host.Isolation.IsolatedView.get_ViewHandle()
    at MS.Internal.Designer.DesignerPane.LoadDesignerView()
    Pourtant, le code compile et aucun problème, ni exception lors de l'exécution.

    Voici le code de classe BoolToImageSourceConverter incriminée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    [ValueConversion(typeof(bool), typeof(ImageSource))]
        public class BoolToImageSourceConverter : IValueConverter
        {
            #region IValueConverter Membres
     
            public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
           {
                return ( (bool)value ) ?
                    ((System.Windows.Markup.ArrayExtension)parameter).Items[1]
                    :
                    ((System.Windows.Markup.ArrayExtension)parameter).Items[0];
     
            }
     
            public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
     
                return ( (ImageSource)value == (ImageSource)(( (System.Windows.Markup.ArrayExtension)parameter ).Items[1] )) ?
                    true
                    :
                    false;
            }
     
     
            #endregion
     
     
        }
    Quelqu'un a t il une explication ?

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Attention, VS 2010 = Version Beta = possibles bugs !

    Tu as migré le projet en .NET 4 ? C'est laquelle la ligne 26 de ton converter ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 346
    Par défaut
    J'ai converti la solution en projet 2010, mais je suis resté en .NET 3.5.

    Ligne 26:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     return ( (bool)value ) ?
                    ((System.Windows.Markup.ArrayExtension)parameter).Items[1]
                    :
                    ((System.Windows.Markup.ArrayExtension)parameter).Items[0];
    Je sais que c'est la version beta, c'est pour ça que je pose la question... peut-être est-ce un problème avec ArrayExtension, ou peut-être est-ce mon code qui n'est pas propre...
    Le fait que ArrayExtension soit une Markup Extension joue peut etre ?

  4. #4
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Citation Envoyé par Chekov Voir le message
    peut-être est-ce un problème avec ArrayExtension,
    Possible: je n'ai jamais utilisé/eu besoin d'utiliser cette classe...

    Peux-tu nous montrer ton utilisation de ce converter ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 346
    Par défaut
    Bien sûr:

    J'ai un bouton défini en XAML sur lequel j'applique un binding selon que le bouton est enfoncé ou non:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <ToggleButton>
       <Viewbox>
                            <Viewbox.Resources>
                                <src2:BoolToImageSourceConverter x:Key="boolImg"/>
                            </Viewbox.Resources>
                            <Image Source="{Binding 
                                ElementName=BtnLock, 
                                Path=IsChecked, 
                                Converter={StaticResource boolImg},
                                ConverterParameter={StaticResource LockedUnlockedImageSourceArray}
                                }"/>
                        </Viewbox>
                </ToggleButton>
    BoolToImageSourceConverter retourne le premier élément ImageSource de mon ExtensionArray LockedUnlockedImageSourceArray passé en paramètre si
    BtnLock.IsChecked=false. Le deuxième élément sinon.

    LockedUnlockedImageSourceArray est défini dans un ResourceDictionary:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <x:ArrayExtension Type="ImageSource" x:Key="LockedUnlockedImageSourceArray">
            <ImageSource>/res/images/CadenasOpened.png</ImageSource>
            <ImageSource>/res/images/CadenasClosed.png</ImageSource>
        </x:ArrayExtension>
    Le code du converter est celui fourni dans mon premier post...

  6. #6
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Pourquoi ne pas simplement renvoyer les images directement dans ton converter plutôt que de passer par un tableau ?

Discussions similaires

  1. Test entre 2 DB (Lire les "Items" dans "Containers")
    Par Ataturk dans le forum VBA Access
    Réponses: 1
    Dernier message: 18/06/2007, 11h57
  2. [système] Comment ajouter un item dans le context menu de Windows ?
    Par ddmicrolog dans le forum API, COM et SDKs
    Réponses: 8
    Dernier message: 29/06/2005, 17h03
  3. changer le texte de tous les Items dans un mainmenu
    Par C.M dans le forum Composants VCL
    Réponses: 7
    Dernier message: 25/07/2004, 13h19
  4. Suppression d'item dans une arborescence
    Par jonzuzu dans le forum MFC
    Réponses: 2
    Dernier message: 24/02/2004, 17h45
  5. Réponses: 2
    Dernier message: 17/08/2003, 20h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo